diff --git a/.github/workflows/review-translation-changes.yaml b/.github/workflows/review-translation-changes.yaml index fafc3245106..dedcb825b71 100644 --- a/.github/workflows/review-translation-changes.yaml +++ b/.github/workflows/review-translation-changes.yaml @@ -22,4 +22,4 @@ jobs: pull-requests: write steps: - - uses: alyf-de/po-review-action@v1.1.0 + - uses: alyf-de/po-review-action@5928f84d6bc9094f9ad6e2c5780f01c0044b800e # v1.1.1 diff --git a/banking/package.json b/banking/package.json index a957fb01bf6..1312ddc704a 100644 --- a/banking/package.json +++ b/banking/package.json @@ -24,10 +24,10 @@ "cmdk": "^1.1.1", "date-fns": "^4.1.0", "dayjs": "^1.11.20", - "frappe-react-sdk": "^1.17.0", + "frappe-react-sdk": "^1.17.1", "fuse.js": "^7.3.0", - "jotai": "^2.20.1", - "jotai-family": "^1.0.2", + "jotai": "^2.20.2", + "jotai-family": "^1.1.0", "lodash.isplainobject": "^4.0.6", "lucide-react": "^1.14.0", "radix-ui": "^1.6.1", @@ -39,7 +39,7 @@ "react-hook-form": "^7.75.0", "react-hotkeys-hook": "^5.3.2", "react-markdown": "^10.1.0", - "react-router": "^8.1.0", + "react-router": "^8.3.0", "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.1", "safe-expr-eval": "^1.0.4", @@ -48,18 +48,18 @@ "tailwindcss": "^4.3.0", "tw-animate-css": "^1.4.0", "usehooks-ts": "^3.1.1", - "vite": "^8.0.16" + "vite": "^8.2.1" }, "devDependencies": { - "@eslint/js": "^9.39.4", + "@eslint/js": "^9.39.5", "@types/node": "^25.3.0", "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", - "eslint": "^9.39.1", + "eslint": "^10.8.1", "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-react-refresh": "^0.5.3", "globals": "^16.5.0", "typescript": "~5.9.3", - "typescript-eslint": "^8.62.1" + "typescript-eslint": "^8.67.0" } } diff --git a/banking/yarn.lock b/banking/yarn.lock index 08ba0fdf146..512ce1fbe5d 100644 --- a/banking/yarn.lock +++ b/banking/yarn.lock @@ -177,7 +177,7 @@ dependencies: tslib "^2.0.0" -"@emnapi/core@1.11.1", "@emnapi/core@^1.11.1": +"@emnapi/core@^1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.11.1.tgz#b9e1064f3a6b1631e241e638eb48d736bfd372a6" integrity sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ== @@ -185,7 +185,7 @@ "@emnapi/wasi-threads" "1.2.2" tslib "^2.4.0" -"@emnapi/runtime@1.11.1", "@emnapi/runtime@^1.11.1": +"@emnapi/runtime@^1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.11.1.tgz#58f1f3d5d81a9b12f793ab688c96371901027c24" integrity sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw== @@ -206,65 +206,50 @@ dependencies: eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2": +"@eslint-community/regexpp@^4.12.2": version "4.12.2" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/config-array@^0.21.2": - version "0.21.2" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.2.tgz#f29e22057ad5316cf23836cee9a34c81fffcb7e6" - integrity sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw== +"@eslint/config-array@^0.23.5": + version "0.23.5" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.23.5.tgz#56e86d243049195d8acc0c06a1b3dfdc3fa3de95" + integrity sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA== dependencies: - "@eslint/object-schema" "^2.1.7" + "@eslint/object-schema" "^3.0.5" debug "^4.3.1" - minimatch "^3.1.5" + minimatch "^10.2.4" -"@eslint/config-helpers@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" - integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== +"@eslint/config-helpers@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.7.0.tgz#09ee4aa07b73f059ec2d4c74bf4b2ff02b322377" + integrity sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw== dependencies: - "@eslint/core" "^0.17.0" + "@eslint/core" "^1.2.1" -"@eslint/core@^0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" - integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== +"@eslint/core@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-1.2.1.tgz#c1da7cd1b82fa8787f98b5629fb811848a1b63ce" + integrity sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ== dependencies: "@types/json-schema" "^7.0.15" -"@eslint/eslintrc@^3.3.5": - version "3.3.5" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.5.tgz#c131793cfc1a7b96f24a83e0a8bbd4b881558c60" - integrity sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg== +"@eslint/js@^9.39.5": + version "9.39.5" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.5.tgz#6f2fbcff75500d229d535e0a949ae13472c84787" + integrity sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A== + +"@eslint/object-schema@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-3.0.5.tgz#88e9bf4d11d2b19c082e78ebe7ce88724a5eb091" + integrity sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw== + +"@eslint/plugin-kit@^0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz#4b0962f3f2c7ce8bc98b3ecfe34525c09d2cb729" + integrity sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A== dependencies: - ajv "^6.14.0" - debug "^4.3.2" - espree "^10.0.1" - globals "^14.0.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.1" - minimatch "^3.1.5" - strip-json-comments "^3.1.1" - -"@eslint/js@9.39.4", "@eslint/js@^9.39.4": - version "9.39.4" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.4.tgz#a3f83bfc6fd9bf33a853dfacd0b49b398eb596c1" - integrity sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw== - -"@eslint/object-schema@^2.1.7": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" - integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== - -"@eslint/plugin-kit@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" - integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== - dependencies: - "@eslint/core" "^0.17.0" + "@eslint/core" "^1.2.1" levn "^0.4.1" "@floating-ui/core@^1.7.5": @@ -359,17 +344,17 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@napi-rs/wasm-runtime@^1.1.4", "@napi-rs/wasm-runtime@^1.1.6": +"@napi-rs/wasm-runtime@^1.1.4": version "1.1.6" resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz#ed33806d0f9be98dc76d0c3d4fd872fda701b5d5" integrity sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg== dependencies: "@tybys/wasm-util" "^0.10.3" -"@oxc-project/types@=0.137.0": - version "0.137.0" - resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.137.0.tgz#56e77f8bb221fa05f18b1cd34d73f94f0954a773" - integrity sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA== +"@oxc-project/types@=0.143.0": + version "0.143.0" + resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.143.0.tgz#c3e4f3178b7b54e4dd194eac6d45258a60f0092b" + integrity sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA== "@radix-ui/number@1.1.2": version "1.1.2" @@ -1032,84 +1017,75 @@ resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.2.tgz#0761a82af55c7e302d5b509eaf1c97ea1fc5feea" integrity sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA== -"@rolldown/binding-android-arm64@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz#cc6153029c3d9afc9caaae2dc362d899ae94ac4f" - integrity sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g== +"@rolldown/binding-android-arm64@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.3.tgz#001b8b0b01844701efda1bb6bed84b681c4a488b" + integrity sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw== -"@rolldown/binding-darwin-arm64@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz#3af681a5d7610340257b3ac7753353b23e884765" - integrity sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw== +"@rolldown/binding-darwin-arm64@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.3.tgz#5e87c602ed634a6fef092e2162e24fbfb881c4ec" + integrity sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA== -"@rolldown/binding-darwin-x64@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz#80ada35e9f35efb7e48a887444ce2052f615d645" - integrity sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw== +"@rolldown/binding-darwin-x64@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.3.tgz#f32e0b286714bd03a421d693415d05d97d265b77" + integrity sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA== -"@rolldown/binding-freebsd-x64@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz#65b2bbb82f005f08aeeff0b6d81e19be68360201" - integrity sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw== +"@rolldown/binding-freebsd-x64@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.3.tgz#5f38ad5761b6b7b21b57a99566bb52634c60ab19" + integrity sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg== -"@rolldown/binding-linux-arm-gnueabihf@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz#7e8d34ad0c7bcfd3baed268e9798571e3888ca71" - integrity sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg== +"@rolldown/binding-linux-arm-gnueabihf@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.3.tgz#ab4dcd07f1bd88e8d659ae0c3bb9d2f290adb897" + integrity sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw== -"@rolldown/binding-linux-arm64-gnu@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz#52bbf400ff219bda1e56c042160d96deb08bfecc" - integrity sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA== +"@rolldown/binding-linux-arm64-gnu@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.3.tgz#d279b7016039a725fb66d82784b9841f42df83da" + integrity sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw== -"@rolldown/binding-linux-arm64-musl@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz#9e82899186f73329f3d8155fa1618ae2e86ffa2a" - integrity sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w== +"@rolldown/binding-linux-arm64-musl@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.3.tgz#d08bbc93d2742214548c5adf7df7788944e5a89a" + integrity sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q== -"@rolldown/binding-linux-ppc64-gnu@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz#050520177316586ccad816eb466ea11015e17ba7" - integrity sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw== +"@rolldown/binding-linux-ppc64-gnu@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.3.tgz#6418e63745b3193f26ab3bb88744b3a4a1356d7c" + integrity sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w== -"@rolldown/binding-linux-s390x-gnu@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz#50efa7b20219c6e31235fded0fd3427f36123e5a" - integrity sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA== +"@rolldown/binding-linux-s390x-gnu@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.3.tgz#77ec30d0704cf4eb1cb4a63f501c9852c6728cf4" + integrity sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg== -"@rolldown/binding-linux-x64-gnu@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz#c5973445113dff50d4077d0edaa4b8a69533dc6f" - integrity sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg== +"@rolldown/binding-linux-x64-gnu@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.3.tgz#3b9b6e0dd3e86c597f42858748ca25f1dfd58ed8" + integrity sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w== -"@rolldown/binding-linux-x64-musl@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz#ddb023f7fc98ccbb8c1b683545216ca7b4e7ebdd" - integrity sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g== +"@rolldown/binding-linux-x64-musl@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.3.tgz#f78033c592c8bd2af48284a45f8e4baaa0befbf5" + integrity sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A== -"@rolldown/binding-openharmony-arm64@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz#832a6da3472722427c73d178c75681858b76aeed" - integrity sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ== +"@rolldown/binding-openharmony-arm64@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.3.tgz#36e951f5a6fca922a5205e283d0a82b9f98199ca" + integrity sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug== -"@rolldown/binding-wasm32-wasi@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz#256cdcc06ad9ada611606526f319642fc0830b0f" - integrity sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg== - dependencies: - "@emnapi/core" "1.11.1" - "@emnapi/runtime" "1.11.1" - "@napi-rs/wasm-runtime" "^1.1.6" +"@rolldown/binding-win32-arm64-msvc@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.3.tgz#c1e494ac47e13bd857fca0b3ad59c33580241f7e" + integrity sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw== -"@rolldown/binding-win32-arm64-msvc@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz#e735c7024a5e17ebaf13689112fa0bdfc6886c38" - integrity sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g== - -"@rolldown/binding-win32-x64-msvc@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz#f06c09db5c8ad4b6904b4d406c9b6f17f392b5c6" - integrity sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA== +"@rolldown/binding-win32-x64-msvc@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.3.tgz#b0effffcd6872f8a021373eb437916b1b52283a4" + integrity sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg== "@rolldown/pluginutils@^1.0.0", "@rolldown/pluginutils@^1.0.1": version "1.0.1" @@ -1271,6 +1247,11 @@ dependencies: "@types/ms" "*" +"@types/esrecurse@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/esrecurse/-/esrecurse-4.3.1.tgz#6f636af962fbe6191b830bd676ba5986926bccec" + integrity sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw== + "@types/estree-jsx@^1.0.0": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" @@ -1278,7 +1259,7 @@ dependencies: "@types/estree" "*" -"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6": +"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6", "@types/estree@^1.0.8": version "1.0.9" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== @@ -1336,100 +1317,100 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== -"@typescript-eslint/eslint-plugin@8.62.1": - version "8.62.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.1.tgz#1736dcdca6cae3359d818456a47d18b674761f7f" - integrity sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA== +"@typescript-eslint/eslint-plugin@8.67.0": + version "8.67.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz#52f9f0e47d5a7571c4336e69bfeea581509ef2cf" + integrity sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ== dependencies: "@eslint-community/regexpp" "^4.12.2" - "@typescript-eslint/scope-manager" "8.62.1" - "@typescript-eslint/type-utils" "8.62.1" - "@typescript-eslint/utils" "8.62.1" - "@typescript-eslint/visitor-keys" "8.62.1" + "@typescript-eslint/scope-manager" "8.67.0" + "@typescript-eslint/type-utils" "8.67.0" + "@typescript-eslint/utils" "8.67.0" + "@typescript-eslint/visitor-keys" "8.67.0" ignore "^7.0.5" natural-compare "^1.4.0" ts-api-utils "^2.5.0" -"@typescript-eslint/parser@8.62.1": - version "8.62.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.62.1.tgz#d3f7ba18f1bf78bfb7256fea021d1927b48e7080" - integrity sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA== +"@typescript-eslint/parser@8.67.0": + version "8.67.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.67.0.tgz#0158022ec9927e0afcd58a8cc2ad57e01d892f5c" + integrity sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w== dependencies: - "@typescript-eslint/scope-manager" "8.62.1" - "@typescript-eslint/types" "8.62.1" - "@typescript-eslint/typescript-estree" "8.62.1" - "@typescript-eslint/visitor-keys" "8.62.1" + "@typescript-eslint/scope-manager" "8.67.0" + "@typescript-eslint/types" "8.67.0" + "@typescript-eslint/typescript-estree" "8.67.0" + "@typescript-eslint/visitor-keys" "8.67.0" debug "^4.4.3" -"@typescript-eslint/project-service@8.62.1": - version "8.62.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.62.1.tgz#78d880eb1cf6859b5ec263d04f95403e9f90ae47" - integrity sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg== +"@typescript-eslint/project-service@8.67.0": + version "8.67.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.67.0.tgz#1552db007ca9206a1c6c7acf49e210bd17a8c56f" + integrity sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.62.1" - "@typescript-eslint/types" "^8.62.1" + "@typescript-eslint/tsconfig-utils" "^8.67.0" + "@typescript-eslint/types" "^8.67.0" debug "^4.4.3" -"@typescript-eslint/scope-manager@8.62.1": - version "8.62.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.62.1.tgz#7ee65e9a6eb3ccdc4816593a4ff38840306de88a" - integrity sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg== +"@typescript-eslint/scope-manager@8.67.0": + version "8.67.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz#4d4c2da09560d10dd7d947cba2d29d14d25af16d" + integrity sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg== dependencies: - "@typescript-eslint/types" "8.62.1" - "@typescript-eslint/visitor-keys" "8.62.1" + "@typescript-eslint/types" "8.67.0" + "@typescript-eslint/visitor-keys" "8.67.0" -"@typescript-eslint/tsconfig-utils@8.62.1", "@typescript-eslint/tsconfig-utils@^8.62.1": - version "8.62.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.1.tgz#e2b5f24fe721044189cb7e81117c96d75979d627" - integrity sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g== +"@typescript-eslint/tsconfig-utils@8.67.0", "@typescript-eslint/tsconfig-utils@^8.67.0": + version "8.67.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz#f45a3eba6b9132fb47141ec03ce2f275f1ea991d" + integrity sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg== -"@typescript-eslint/type-utils@8.62.1": - version "8.62.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.62.1.tgz#ebd30b13bacb13070917259a23309cf644121f9a" - integrity sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg== +"@typescript-eslint/type-utils@8.67.0": + version "8.67.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz#96bed105275559df3bcf0449b73a6414d35c59ce" + integrity sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q== dependencies: - "@typescript-eslint/types" "8.62.1" - "@typescript-eslint/typescript-estree" "8.62.1" - "@typescript-eslint/utils" "8.62.1" + "@typescript-eslint/types" "8.67.0" + "@typescript-eslint/typescript-estree" "8.67.0" + "@typescript-eslint/utils" "8.67.0" debug "^4.4.3" ts-api-utils "^2.5.0" -"@typescript-eslint/types@8.62.1", "@typescript-eslint/types@^8.62.1": - version "8.62.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.62.1.tgz#c58be954e483b2fc98275374d5bcb40b99842dc1" - integrity sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q== +"@typescript-eslint/types@8.67.0", "@typescript-eslint/types@^8.67.0": + version "8.67.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.67.0.tgz#4a8d00cc1faba5c14feabc60f85b7a32652f34b6" + integrity sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww== -"@typescript-eslint/typescript-estree@8.62.1": - version "8.62.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.1.tgz#98c1bb17635d5b026b24193a8d29188ac64380ff" - integrity sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA== +"@typescript-eslint/typescript-estree@8.67.0": + version "8.67.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz#116c3a47c06119c5a050e8851861d6497dd64bc2" + integrity sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw== dependencies: - "@typescript-eslint/project-service" "8.62.1" - "@typescript-eslint/tsconfig-utils" "8.62.1" - "@typescript-eslint/types" "8.62.1" - "@typescript-eslint/visitor-keys" "8.62.1" + "@typescript-eslint/project-service" "8.67.0" + "@typescript-eslint/tsconfig-utils" "8.67.0" + "@typescript-eslint/types" "8.67.0" + "@typescript-eslint/visitor-keys" "8.67.0" debug "^4.4.3" minimatch "^10.2.2" semver "^7.7.3" tinyglobby "^0.2.15" ts-api-utils "^2.5.0" -"@typescript-eslint/utils@8.62.1": - version "8.62.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.62.1.tgz#1622b75c7e6df308181dd0b44855dc4228da0457" - integrity sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g== +"@typescript-eslint/utils@8.67.0": + version "8.67.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.67.0.tgz#3e478a3d69d330a1fc50c12746cc2ee0732ccfcd" + integrity sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A== dependencies: "@eslint-community/eslint-utils" "^4.9.1" - "@typescript-eslint/scope-manager" "8.62.1" - "@typescript-eslint/types" "8.62.1" - "@typescript-eslint/typescript-estree" "8.62.1" + "@typescript-eslint/scope-manager" "8.67.0" + "@typescript-eslint/types" "8.67.0" + "@typescript-eslint/typescript-estree" "8.67.0" -"@typescript-eslint/visitor-keys@8.62.1": - version "8.62.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.1.tgz#499657d77ffafb8a99eb1d6c97847ca430234722" - integrity sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g== +"@typescript-eslint/visitor-keys@8.67.0": + version "8.67.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz#601d40af9acf82a28da2286f3edafc69bba9017f" + integrity sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA== dependencies: - "@typescript-eslint/types" "8.62.1" + "@typescript-eslint/types" "8.67.0" eslint-visitor-keys "^5.0.0" "@ungap/structured-clone@^1.0.0": @@ -1449,10 +1430,10 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.15.0: - version "8.17.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.17.0.tgz#1785adb84faf8d8add10369b93826fc2bd08f1fe" - integrity sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg== +acorn@^8.16.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.18.0.tgz#4faf01b2d6d326bfeed97aea1f52220b5f4c1940" + integrity sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ== agent-base@6: version "6.0.2" @@ -1471,18 +1452,6 @@ ajv@^6.14.0: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - aria-hidden@^1.2.4: version "1.2.6" resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.6.tgz#73051c9b088114c795b1ea414e9c0fff874ffc1a" @@ -1515,11 +1484,6 @@ bail@^2.0.0: resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - balanced-match@^4.0.2: version "4.0.4" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" @@ -1530,14 +1494,6 @@ baseline-browser-mapping@^2.10.38: resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.40.tgz#f372c8eb36ff4ad0b5e7ae467014abef124554ba" integrity sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw== -brace-expansion@^1.1.7: - version "1.1.15" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.15.tgz#a6d90d54067236e5f42570a3b7378d594d9b7738" - integrity sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - brace-expansion@^5.0.5: version "5.0.7" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.7.tgz#1b0e46965b479dad65af737b4a02790a05498337" @@ -1545,6 +1501,13 @@ brace-expansion@^5.0.5: dependencies: balanced-match "^4.0.2" +brace-expansion@^5.0.8: + version "5.0.9" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.9.tgz#7c72438809b5fa5babf54199a1f1c281a6984fcf" + integrity sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg== + dependencies: + balanced-match "^4.0.2" + browserslist@^4.24.0: version "4.28.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.4.tgz#dd8b8167a32845ff5f8cd6ce13f5abba16cd04c9" @@ -1564,11 +1527,6 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: es-errors "^1.3.0" function-bind "^1.1.2" -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - caniuse-lite@^1.0.30001799: version "1.0.30001800" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001800.tgz#b896c773e1c39400809415162bb5320371291b36" @@ -1579,14 +1537,6 @@ ccount@^2.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - character-entities-html4@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" @@ -1634,18 +1584,6 @@ cmdk@^1.1.1: "@radix-ui/react-id" "^1.1.0" "@radix-ui/react-primitive" "^2.0.2" -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1658,11 +1596,6 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -1856,11 +1789,13 @@ eslint-plugin-react-refresh@^0.5.3: resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.3.tgz#0311218631193fc1ea1c37531a1e7085a813bb60" integrity sha512-5EMmLCV98Pi4o/f/3DP/v/tNqLHMIc9I8LKClNDWhZ9JTho89/kQcitCXQBMG7sAfVRK0Ie3T2EDOzp1YXYiVA== -eslint-scope@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" - integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== +eslint-scope@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-9.1.2.tgz#b9de6ace2fab1cff24d2e58d85b74c8fcea39802" + integrity sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ== dependencies: + "@types/esrecurse" "^4.3.1" + "@types/estree" "^1.0.8" esrecurse "^4.3.0" estraverse "^5.2.0" @@ -1869,42 +1804,34 @@ eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" - integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== - -eslint-visitor-keys@^5.0.0: +eslint-visitor-keys@^5.0.0, eslint-visitor-keys@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== -eslint@^9.39.1: - version "9.39.4" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.4.tgz#855da1b2e2ad66dc5991195f35e262bcec8117b5" - integrity sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ== +eslint@^10.8.1: + version "10.8.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-10.8.1.tgz#fb37d514c19b6dd5b2d6b70169fd26fddfa97967" + integrity sha512-wqA7W2jbsC/BnV9Iv1UZpKVFkO1AdNoSmYW8NWG4HNOBbkAMvIqDZ27pI2f07dqn583NcIC44ckjAcOXDL1QbQ== dependencies: "@eslint-community/eslint-utils" "^4.8.0" - "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.21.2" - "@eslint/config-helpers" "^0.4.2" - "@eslint/core" "^0.17.0" - "@eslint/eslintrc" "^3.3.5" - "@eslint/js" "9.39.4" - "@eslint/plugin-kit" "^0.4.1" + "@eslint-community/regexpp" "^4.12.2" + "@eslint/config-array" "^0.23.5" + "@eslint/config-helpers" "^0.7.0" + "@eslint/core" "^1.2.1" + "@eslint/plugin-kit" "^0.7.2" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" ajv "^6.14.0" - chalk "^4.0.0" cross-spawn "^7.0.6" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^8.4.0" - eslint-visitor-keys "^4.2.1" - espree "^10.4.0" - esquery "^1.5.0" + eslint-scope "^9.1.2" + eslint-visitor-keys "^5.0.1" + espree "^11.2.0" + esquery "^1.7.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^8.0.0" @@ -1914,21 +1841,20 @@ eslint@^9.39.1: imurmurhash "^0.1.4" is-glob "^4.0.0" json-stable-stringify-without-jsonify "^1.0.1" - lodash.merge "^4.6.2" - minimatch "^3.1.5" + minimatch "^10.2.5" natural-compare "^1.4.0" optionator "^0.9.3" -espree@^10.0.1, espree@^10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" - integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== +espree@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-11.2.0.tgz#01d5e47dc332aaba3059008362454a8cc34ccaa5" + integrity sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw== dependencies: - acorn "^8.15.0" + acorn "^8.16.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.2.1" + eslint-visitor-keys "^5.0.1" -esquery@^1.5.0: +esquery@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== @@ -2033,21 +1959,21 @@ form-data@^4.0.5: hasown "^2.0.4" mime-types "^2.1.35" -frappe-js-sdk@^1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/frappe-js-sdk/-/frappe-js-sdk-1.14.0.tgz#6cfc3a91598dc179890ff2b1db675f228bd1565a" - integrity sha512-v0n75UP8SffSH77QWbvD43FXndF+P8Us1MyIVH287uwPpLYYk7tXCA/ftNTn3a2YV7VdncNU7XDwxYNgAoBt8w== +frappe-js-sdk@^1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/frappe-js-sdk/-/frappe-js-sdk-1.14.1.tgz#b6737e64e6019ee072a667be6f56ebad3b3dd81a" + integrity sha512-HxY1KygYs/05ykjKo1YB0hQlUOiA3odEg+TWKIWRgNH0bURlXxSPiNKtBmQVOm92EhDGyqQQjQe5I1QdKSImbw== dependencies: axios "^1.18.1" -frappe-react-sdk@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/frappe-react-sdk/-/frappe-react-sdk-1.17.0.tgz#4777261b80e6ba195a007e61e75757c02b881cc1" - integrity sha512-1Q0T5Qdtm1+g0sb0PSxIvleVK17gG2QTXgRVeCC927JCFgH8UsrQNbx8MZ1ojlPIp8AahA0NRwH+C4RL0cT8sw== +frappe-react-sdk@^1.17.1: + version "1.17.1" + resolved "https://registry.yarnpkg.com/frappe-react-sdk/-/frappe-react-sdk-1.17.1.tgz#7bd0bc87065e41acae5474d27096a18a59d56780" + integrity sha512-9FxtG8kb1kUHx67P0AsdFeEnI39HyPP2SXDquy7IkYWRX4XCA/gdrP75u/idH+SiDoy3jWJLbewSdqHq9oq5gw== dependencies: - frappe-js-sdk "^1.14.0" + frappe-js-sdk "^1.14.1" socket.io-client "4.7.1" - swr "^2.4.1" + swr "^2.4.2" fsevents@~2.3.3: version "2.3.3" @@ -2105,11 +2031,6 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -globals@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" - integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== - globals@^16.5.0: version "16.5.0" resolved "https://registry.yarnpkg.com/globals/-/globals-16.5.0.tgz#ccf1594a437b97653b2be13ed4d8f5c9f850cac1" @@ -2125,11 +2046,6 @@ graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" @@ -2281,14 +2197,6 @@ ignore@^7.0.5: resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== -import-fresh@^3.2.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" - integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2349,28 +2257,21 @@ jiti@^2.7.0: resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.7.0.tgz#974228f2f4ca2bc21885a1797b45fea68e950c64" integrity sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ== -jotai-family@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jotai-family/-/jotai-family-1.0.2.tgz#11d9f88a39579aaf0d80dcd8826b8c32cf6b5269" - integrity sha512-U1aTMGxmsmz2Z8gaJD1/ljmMnsmG4/dqrcsfwGbjWV7p6boB9Vy3+75YwUpwPj7GbLNJk9O8rl1VNi8d7+6Rxw== +jotai-family@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jotai-family/-/jotai-family-1.1.0.tgz#87eab9c6e8b241f3bc39b6f04a3b55247ebd40bb" + integrity sha512-T1ACRsLnN5Mu0B8/DIWUW1hW7x1RmpBprm/+CWmUTf4ZZUmIFEQpBJ9PNQtXPjdUD2uu8RvwBxr7nJPdCw5BXg== -jotai@^2.20.1: - version "2.20.1" - resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.20.1.tgz#473274f1b78c60acce1b868be5655b3c706dec8e" - integrity sha512-dnuKfU/GLi8B28RRMjQ3AfoN7kfzP8o41+AX2FmITZqEMY8PHnjABq+VkEooomLwYaGjda+pgy0yFSjaHX/ZPg== +jotai@^2.20.2: + version "2.20.2" + resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.20.2.tgz#fccdc02ee68b314c2a723a8b9c35de6fcca5e644" + integrity sha512-aHB4CNb9qRcyf0mwSB6EO5bCGAjx8cTwFgOFCE2leOnTzqACbnSWG8XoWB3LxCT1Qoj03I1OWAHszDmN4uHb/w== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.0.tgz#d1900572a7f7cf0b5f540c83673e60bad3436592" - integrity sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q== - dependencies: - argparse "^2.0.1" - jsesc@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -2416,57 +2317,112 @@ lightningcss-android-arm64@1.32.0: resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz#f033885116dfefd9c6f54787523e3514b61e1968" integrity sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg== +lightningcss-android-arm64@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz#9a6841f88ae50fc83502903892b41af41bc2b907" + integrity sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg== + lightningcss-darwin-arm64@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz#50b71871b01c8199584b649e292547faea7af9b5" integrity sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ== +lightningcss-darwin-arm64@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz#c0f2c31c0bfd19fa4dd3f18e957a1f1a152097d6" + integrity sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg== + lightningcss-darwin-x64@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz#35f3e97332d130b9ca181e11b568ded6aebc6d5e" integrity sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w== +lightningcss-darwin-x64@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz#cb0705965acb538c6683949ce6925fb3cdf7c361" + integrity sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ== + lightningcss-freebsd-x64@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz#9777a76472b64ed6ff94342ad64c7bafd794a575" integrity sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig== +lightningcss-freebsd-x64@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz#763538828b26bab2680dadafcc84ee78b0eb502b" + integrity sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg== + lightningcss-linux-arm-gnueabihf@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz#13ae652e1ab73b9135d7b7da172f666c410ad53d" integrity sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw== +lightningcss-linux-arm-gnueabihf@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz#6862e3176a331aedbdec1ed352b4d7d0dd0784de" + integrity sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ== + lightningcss-linux-arm64-gnu@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz#417858795a94592f680123a1b1f9da8a0e1ef335" integrity sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ== +lightningcss-linux-arm64-gnu@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz#c6a3a2ed15141daf6bdc2628930f8e39bdf473aa" + integrity sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg== + lightningcss-linux-arm64-musl@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz#6be36692e810b718040802fd809623cffe732133" integrity sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg== +lightningcss-linux-arm64-musl@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz#7fa1334971fc82845f9827df6ef8a0b20914bac6" + integrity sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ== + lightningcss-linux-x64-gnu@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz#0b7803af4eb21cfd38dd39fe2abbb53c7dd091f6" integrity sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA== +lightningcss-linux-x64-gnu@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz#8b927862ea8c2bbc6831a46509244b50d9936e55" + integrity sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg== + lightningcss-linux-x64-musl@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz#88dc8ba865ddddb1ac5ef04b0f161804418c163b" integrity sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg== +lightningcss-linux-x64-musl@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz#0c525bb077dfd94404c059cfe42dad797e96aeaf" + integrity sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw== + lightningcss-win32-arm64-msvc@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz#4f30ba3fa5e925f5b79f945e8cc0d176c3b1ab38" integrity sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw== +lightningcss-win32-arm64-msvc@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz#850ee1103dac989cfab50e3ac22d1a69e394e63d" + integrity sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA== + lightningcss-win32-x64-msvc@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz#141aa5605645064928902bb4af045fa7d9f4220a" integrity sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q== -lightningcss@1.32.0, lightningcss@^1.32.0: +lightningcss-win32-x64-msvc@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz#e343ae152eed3609dc6e11949d1a3bf39a1c946f" + integrity sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA== + +lightningcss@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.32.0.tgz#b85aae96486dcb1bf49a7c8571221273f4f1e4a9" integrity sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ== @@ -2485,6 +2441,25 @@ lightningcss@1.32.0, lightningcss@^1.32.0: lightningcss-win32-arm64-msvc "1.32.0" lightningcss-win32-x64-msvc "1.32.0" +lightningcss@^1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.33.0.tgz#c08867d71a79385c6e190214fd72fef3e5f95f0b" + integrity sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-android-arm64 "1.33.0" + lightningcss-darwin-arm64 "1.33.0" + lightningcss-darwin-x64 "1.33.0" + lightningcss-freebsd-x64 "1.33.0" + lightningcss-linux-arm-gnueabihf "1.33.0" + lightningcss-linux-arm64-gnu "1.33.0" + lightningcss-linux-arm64-musl "1.33.0" + lightningcss-linux-x64-gnu "1.33.0" + lightningcss-linux-x64-musl "1.33.0" + lightningcss-win32-arm64-msvc "1.33.0" + lightningcss-win32-x64-msvc "1.33.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -2502,11 +2477,6 @@ lodash.isplainobject@^4.0.6: resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - longest-streak@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" @@ -3020,22 +2990,22 @@ minimatch@^10.2.2: dependencies: brace-expansion "^5.0.5" -minimatch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" - integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== +minimatch@^10.2.4, minimatch@^10.2.5: + version "10.2.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.6.tgz#fd956bbe0b77241e9f15ac5dccb1c638060968ef" + integrity sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A== dependencies: - brace-expansion "^1.1.7" + brace-expansion "^5.0.8" ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nanoid@^3.3.12: - version "3.3.15" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.15.tgz#36c490fad8c6e86c824c940dfdde999b69ed4316" - integrity sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA== +nanoid@^3.3.17: + version "3.3.18" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.18.tgz#f66a2de1199ffde0fcf21c8a5f13106b1c081913" + integrity sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w== natural-compare@^1.4.0: version "1.4.0" @@ -3078,13 +3048,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - parse-entities@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" @@ -3125,12 +3088,17 @@ picomatch@^4.0.4: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== -postcss@^8.5.16: - version "8.5.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.16.tgz#1230ce0b5df354c24c0ea45f99ce5f6a88279d28" - integrity sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg== +picomatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.5.tgz#51ea57a17d86f605f81039595fbc40ed06a55fab" + integrity sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A== + +postcss@^8.5.25: + version "8.5.26" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.26.tgz#6e75135780c7e10df3433bf2266c552d35c8c620" + integrity sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ== dependencies: - nanoid "^3.3.12" + nanoid "^3.3.17" picocolors "^1.1.1" source-map-js "^1.2.1" @@ -3306,10 +3274,10 @@ react-remove-scroll@^2.7.2: use-callback-ref "^1.3.3" use-sidecar "^1.1.3" -react-router@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-8.1.0.tgz#242c9169bdf8da4e080279c92048f0016eb3aa4b" - integrity sha512-Mdfi61uObuvWNN9OhChOC0HV6YWOIfKRzEWOvCHRSuQg8IM+Nv10edaM/2HE8ZixBpUTdQbruyWqC3sDkkh9vw== +react-router@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-8.3.0.tgz#b7bc69c3e3833ba79ebf892aef03d62b649508f8" + integrity sha512-qyPMvW83jGIct3yiieisxdk9M745anqhpIMKN5m1t6yBMfgVPpt77aHOqs5fUlEJRMCGffg9BaQLH9oPVOL7xQ== dependencies: cookie-es "^3.1.1" @@ -3377,34 +3345,28 @@ remark-stringify@^11.0.0: mdast-util-to-markdown "^2.0.0" unified "^11.0.0" -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -rolldown@~1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.1.3.tgz#87072bfd0d1bdd02a66076a261a62e8e49b3f0e2" - integrity sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g== +rolldown@~1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.2.3.tgz#103bdcbbd575d51265277b8b510f080827b6eb6f" + integrity sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A== dependencies: - "@oxc-project/types" "=0.137.0" + "@oxc-project/types" "=0.143.0" "@rolldown/pluginutils" "^1.0.0" optionalDependencies: - "@rolldown/binding-android-arm64" "1.1.3" - "@rolldown/binding-darwin-arm64" "1.1.3" - "@rolldown/binding-darwin-x64" "1.1.3" - "@rolldown/binding-freebsd-x64" "1.1.3" - "@rolldown/binding-linux-arm-gnueabihf" "1.1.3" - "@rolldown/binding-linux-arm64-gnu" "1.1.3" - "@rolldown/binding-linux-arm64-musl" "1.1.3" - "@rolldown/binding-linux-ppc64-gnu" "1.1.3" - "@rolldown/binding-linux-s390x-gnu" "1.1.3" - "@rolldown/binding-linux-x64-gnu" "1.1.3" - "@rolldown/binding-linux-x64-musl" "1.1.3" - "@rolldown/binding-openharmony-arm64" "1.1.3" - "@rolldown/binding-wasm32-wasi" "1.1.3" - "@rolldown/binding-win32-arm64-msvc" "1.1.3" - "@rolldown/binding-win32-x64-msvc" "1.1.3" + "@rolldown/binding-android-arm64" "1.2.3" + "@rolldown/binding-darwin-arm64" "1.2.3" + "@rolldown/binding-darwin-x64" "1.2.3" + "@rolldown/binding-freebsd-x64" "1.2.3" + "@rolldown/binding-linux-arm-gnueabihf" "1.2.3" + "@rolldown/binding-linux-arm64-gnu" "1.2.3" + "@rolldown/binding-linux-arm64-musl" "1.2.3" + "@rolldown/binding-linux-ppc64-gnu" "1.2.3" + "@rolldown/binding-linux-s390x-gnu" "1.2.3" + "@rolldown/binding-linux-x64-gnu" "1.2.3" + "@rolldown/binding-linux-x64-musl" "1.2.3" + "@rolldown/binding-openharmony-arm64" "1.2.3" + "@rolldown/binding-win32-arm64-msvc" "1.2.3" + "@rolldown/binding-win32-x64-msvc" "1.2.3" safe-expr-eval@^1.0.4: version "1.0.4" @@ -3479,11 +3441,6 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - style-to-js@^1.0.0: version "1.1.21" resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.21.tgz#2908941187f857e79e28e9cd78008b9a0b3e0e8d" @@ -3498,17 +3455,10 @@ style-to-object@1.0.14: dependencies: inline-style-parser "0.2.7" -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -swr@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/swr/-/swr-2.4.2.tgz#741ba9c804db756cfa966376cbc33f84a2d88cfd" - integrity sha512-ej644Y2bvkIajfR32KGeSSdBXQW+ScjGjkybZgSE7kFpk9eGnV44XY9FJylXi+W75pavSX1PVNB57W5EbhGIYw== +swr@^2.4.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/swr/-/swr-2.5.0.tgz#186c68b08b3419a5ebba4cea53d776467c9fa2d4" + integrity sha512-W0GomadRJe9OfzIoRX0kZHhDSaRRfdiOUeH6uazgR05SibBhDNwfdTbhAxmFtObvkf59fFymo22mooKukosvNA== dependencies: dequal "^2.0.3" use-sync-external-store "^1.6.0" @@ -3568,15 +3518,15 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -typescript-eslint@^8.62.1: - version "8.62.1" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.62.1.tgz#eb93fd94d527aa04ec5b844fb0b4ada613cc7d3f" - integrity sha512-vymnnM5g0AKQDSAyfP12nMIBvgwgA42syg74kkuZ4x1VuTzwQKwc5h9rGxeShCjny5o+zWAb6OEoz7XLgrIkIw== +typescript-eslint@^8.67.0: + version "8.67.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.67.0.tgz#1e92de09ee0ff2d96cc0848f5e9f345ea930d963" + integrity sha512-S2udFs8tCKEKffuJ4TB1idGUZiXdCPGi3IPBGWXarbLQ5UPXORV8QEVzJ4gCRduURMb5EkpNCdjbk0eDIuI8Yg== dependencies: - "@typescript-eslint/eslint-plugin" "8.62.1" - "@typescript-eslint/parser" "8.62.1" - "@typescript-eslint/typescript-estree" "8.62.1" - "@typescript-eslint/utils" "8.62.1" + "@typescript-eslint/eslint-plugin" "8.67.0" + "@typescript-eslint/parser" "8.67.0" + "@typescript-eslint/typescript-estree" "8.67.0" + "@typescript-eslint/utils" "8.67.0" typescript@~5.9.3: version "5.9.3" @@ -3705,15 +3655,15 @@ vfile@^6.0.0: "@types/unist" "^3.0.0" vfile-message "^4.0.0" -vite@^8.0.16: - version "8.1.2" - resolved "https://registry.yarnpkg.com/vite/-/vite-8.1.2.tgz#3ac29b5868ccf28c59321391be1ebe906f135ebd" - integrity sha512-6YYPbRXTxx6bRXmOn7XdnQAy5DQNHhDgtjhDHI13oe4pY93kkcdGJWxpGwOm++/Wh0QpQhDrpIoVMrmrsI5AGQ== +vite@^8.2.1: + version "8.2.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-8.2.1.tgz#6fc8d8bb843bd52353091fac978e194d4de5b31d" + integrity sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw== dependencies: - lightningcss "^1.32.0" - picomatch "^4.0.4" - postcss "^8.5.16" - rolldown "~1.1.3" + lightningcss "^1.33.0" + picomatch "^4.0.5" + postcss "^8.5.25" + rolldown "~1.2.1" tinyglobby "^0.2.17" optionalDependencies: fsevents "~2.3.3" diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/unverified/be_l10nbe_chart_template.json b/erpnext/accounts/doctype/account/chart_of_accounts/unverified/be_l10nbe_chart_template.json deleted file mode 100644 index 7fc58ce410b..00000000000 --- a/erpnext/accounts/doctype/account/chart_of_accounts/unverified/be_l10nbe_chart_template.json +++ /dev/null @@ -1,1539 +0,0 @@ -{ - "country_code": "be", - "name": "Belgian - PCMN", - "tree": { - "CLASSE 1": { - "BENEFICE (PERTE) REPORTE(E)": { - "B\u00e9n\u00e9fice report\u00e9": {}, - "Perte report\u00e9e": {} - }, - "CAPITAL": { - "Capital non appel\u00e9": {}, - "Capital souscrit ou capital personnel": { - "Capital amorti": {}, - "Capital non amorti": {} - }, - "Compte de l'exploitant": { - "Imp\u00f4ts personnels": {}, - "Op\u00e9rations courantes": {}, - "R\u00e9mun\u00e9rations et autres avantages": {} - } - }, - "COMPTES DE LIAISON DES ETABLISSEMENTS ET SUCCURSALES": {}, - "DETTES A PLUS D'UN AN": { - "Acomptes re\u00e7us sur commandes": {}, - "Autres emprunts": {}, - "Cautionnements re\u00e7us en num\u00e9raires": {}, - "Dettes commerciales": { - "Effets \u00e0 payer": { - "Entreprises apparent\u00e9es": { - "Entreprises avec lesquelles il existe un lien de participation": {}, - "Entreprises li\u00e9es": {} - }, - "Fournisseurs ordinaires": { - "Fournisseurs C.E.E.": {}, - "Fournisseurs belges": {}, - "Fournisseurs importation": {} - } - }, - "Fournisseurs : dettes en compte": { - "Entreprises apparent\u00e9es": { - "Entreprises avec lesquelles il existe un lien de participation": {}, - "Entreprises li\u00e9es": {} - }, - "Fournisseurs ordinaires": { - "Fournisseurs C.E.E.": {}, - "Fournisseurs belges": {}, - "Fournisseurs importation": {} - } - } - }, - "Dettes de location-financement et assimil\u00e9s": { - "Dettes de location-financement de biens immobiliers": {}, - "Dettes de location-financement de biens mobiliers": {}, - "Dettes sur droits r\u00e9els sur immeubles": {} - }, - "Dettes diverses": { - "Administrateurs, g\u00e9rants, associ\u00e9s": {}, - "Autres dettes diverses": {}, - "Autres entreprises avec lesquelles il existe un lien de participation": {}, - "Dettes envers les coparticipants des associations momentan\u00e9es et en participation": {}, - "Entreprises li\u00e9es": {}, - "Rentes viag\u00e8res capitalis\u00e9es": {} - }, - "Emprunts obligataires non subordonn\u00e9s": { - "Convertibles": {}, - "Non convertibles": {} - }, - "Emprunts subordonn\u00e9s": { - "Convertibles": {}, - "Non convertibles": {} - }, - "Etablissements de cr\u00e9dit": { - "Cr\u00e9dits d'acceptation": { - "Banque A": {}, - "Banque B": {} - }, - "Dettes en compte": { - "Banque A": {}, - "Banque B": {} - }, - "Promesses": { - "Banque A": {}, - "Banque B": {} - } - } - }, - "PLUS-VALUES DE REEVALUATION": { - "Plus-values de r\u00e9\u00e9valuation sur immobilisations corporelles": { - "Plus-values de r\u00e9\u00e9valuation": {}, - "Reprises de r\u00e9ductions de valeur": {} - }, - "Plus-values de r\u00e9\u00e9valuation sur immobilisations financi\u00e8res": { - "Plus-values de r\u00e9\u00e9valuation": {}, - "Reprises de r\u00e9ductions de valeur": {} - }, - "Plus-values de r\u00e9\u00e9valuation sur immobilisations incorporelles": { - "Plus-values de r\u00e9\u00e9valuation": {}, - "Reprises de r\u00e9ductions de valeur": {} - }, - "Plus-values de r\u00e9\u00e9valuation sur stocks": {}, - "Reprises de r\u00e9ductions de valeur sur placements de tr\u00e9sorerie": {} - }, - "PRIMES D'EMISSION": {}, - "PROVISIONS POUR RISQUES ET CHARGES": { - "Provisions pour autres risques et charges": {}, - "Provisions pour charges fiscales": {}, - "Provisions pour engagements relatifs \u00e0 l'acquisition ou \u00e0 la cession d'immobilisations": {}, - "Provisions pour ex\u00e9cution de commandes pass\u00e9es ou re\u00e7ues": {}, - "Provisions pour garanties techniques attach\u00e9es aux ventes et prestations d\u00e9j\u00e0 effectu\u00e9es par l'entreprise": {}, - "Provisions pour grosses r\u00e9parations et gros entretiens": {}, - "Provisions pour pensions et obligations similaires": {}, - "Provisions pour positions et march\u00e9s \u00e0 terme en devises ou positions et march\u00e9s \u00e0 terme en marchandises": {}, - "Provisions pour s\u00fbret\u00e9s personnelles ou r\u00e9elles constitu\u00e9es \u00e0 l'appui de dettes et d'engagements de tiers": {} - }, - "RESERVES": { - "R\u00e9serve l\u00e9gale": {}, - "R\u00e9serves disponibles": { - "R\u00e9serve pour installations en faveur du personnel 1333 R\u00e9serves libres": {}, - "R\u00e9serve pour renouvellement des immobilisations": {}, - "R\u00e9serve pour r\u00e9gularisation de dividendes": {} - }, - "R\u00e9serves immunis\u00e9es": {}, - "R\u00e9serves indisponibles": { - "Autres r\u00e9serves indisponibles": {}, - "R\u00e9serve pour actions propres": {} - } - }, - "SUBSIDES EN CAPITAL": { - "Montants obtenus": {}, - "Montants transf\u00e9r\u00e9s aux r\u00e9sultats": {} - }, - "root_type": "" - }, - "CLASSE 2. FRAIS D'ETABLISSEMENT. ACTIFS IMMOBILISES ET CREANCES A PLUS D'UN AN": { - "AUTRES IMMOBILISATIONS CORPORELLES": { - "Amortissements sur autres immobilisations corporelles": { - "Amortissements sur emballages r\u00e9cup\u00e9rables": {}, - "Amortissements sur frais d'am\u00e9nagement des locaux pris en location": {}, - "Amortissements sur maison d'habitation": {}, - "Amortissements sur mat\u00e9riel d'emballage": {}, - "Amortissements sur r\u00e9serve immobili\u00e8re": {} - }, - "Emballages r\u00e9cup\u00e9rables": {}, - "Frais d'am\u00e9nagements de locaux pris en location": {}, - "Maison d'habitation": {}, - "Mat\u00e9riel d'emballage": {}, - "Plus-values act\u00e9es sur autres immobilisations corporelles": {}, - "R\u00e9serve immobili\u00e8re": {} - }, - "CREANCES A PLUS D'UN AN": { - "Autres cr\u00e9ances": { - "Cr\u00e9ances douteuses": {}, - "Cr\u00e9ances en compte": { - "Cr\u00e9ances autres d\u00e9biteurs": {}, - "Cr\u00e9ances entreprises avec lesquelles il existe un lien de participation": {}, - "Cr\u00e9ances entreprises li\u00e9es": {} - }, - "Cr\u00e9ances r\u00e9sultant de la cession d'immobilisations donn\u00e9es en leasing": {}, - "Effets \u00e0 recevoir": { - "Sur autres d\u00e9biteurs": {}, - "Sur entreprises avec lesquelles il existe un lien de participation": {}, - "Sur entreprises li\u00e9es": {} - }, - "R\u00e9ductions de valeur act\u00e9es": {} - }, - "Cr\u00e9ances commerciales": { - "Acomptes vers\u00e9s": {}, - "Clients": { - "Cr\u00e9ances en compte sur entreprises li\u00e9es": {}, - "Cr\u00e9ances sur les coparticipants": {}, - "Sur clients Belgique": {}, - "Sur clients C.E.E.": {}, - "Sur clients exportation hors C.E.E.": {}, - "Sur entreprises avec lesquelles il existe un lien de participation": {} - }, - "Cr\u00e9ances douteuses": {}, - "Effets \u00e0 recevoir": { - "Sur clients Belgique": {}, - "Sur clients C.E.E.": {}, - "Sur clients exportation hors C.E.E.": {}, - "Sur entreprises avec lesquelles il existe un lien de participation": {}, - "Sur entreprises li\u00e9es": {} - }, - "Retenues sur garanties": {}, - "R\u00e9ductions de valeur act\u00e9es": {} - } - }, - "FRAIS D'ETABLISSEMENT": { - "Autres frais d'\u00e9tablissement": { - "Amortissements sur autres frais d'\u00e9tablissement": {}, - "Autres frais d'\u00e9tablissement": {} - }, - "Frais d'\u00e9mission d'emprunts et primes de remboursement": { - "Agios sur emprunts et frais d'\u00e9mission d'emprunts": {}, - "Amortissements sur agios sur emprunts et frais d'\u00e9mission d'emprunts": {} - }, - "Frais de constitution et d'augmentation de capital": { - "Amortissements sur frais de constitution et d'augmentation de capital": {}, - "Frais de constitution et d'augmentation de capital": {} - }, - "Frais de restructuration": { - "Amortissements sur frais de restructuration": {}, - "Co\u00fbt des frais de restructuration": {} - }, - "Int\u00e9r\u00eats intercalaires": { - "Amortissements sur int\u00e9r\u00eats intercalaires": {}, - "Int\u00e9r\u00eats intercalaires": {} - } - }, - "IMMOBILISATION DETENUES EN LOCATION-FINANCEMENT ET DROITS SIMILAIRES": { - "Installations, machines et outillage": { - "Amortissements sur installations, machines et outillage pris en leasing": {}, - "Installations": {}, - "Machines": {}, - "Outillage": {}, - "Plus-values act\u00e9es sur installations, machines et outillage pris en leasing": {} - }, - "Mobilier et mat\u00e9riel roulant": { - "Amortissements sur mobilier et mat\u00e9riel roulant en leasing": {}, - "Mat\u00e9riel roulant": {}, - "Mobilier": {}, - "Plus-values act\u00e9es sur mobilier et mat\u00e9riel roulant en leasing": {} - }, - "Terrains et constructions": { - "Amortissements et r\u00e9ductions de valeur sur terrains et constructions en leasing": {}, - "Constructions": {}, - "Plus-values sur emphyt\u00e9ose, leasing et droits similaires : terrains et constructions": {}, - "Terrains": {} - } - }, - "IMMOBILISATIONS CORPORELLES EN COURS ET ACOMPTES VERSES": { - "Avances et acomptes vers\u00e9s sur immobilisations en cours": {}, - "Immobilisations en cours": { - "Autres immobilisations corporelles": {}, - "Constructions": {}, - "Installations, machines et outillage": {}, - "Mobilier et mat\u00e9riel roulant": {} - } - }, - "IMMOBILISATIONS FINANCIERES": { - "Autres actions et parts": { - "Montants non appel\u00e9s": {}, - "Plus-values act\u00e9es": {}, - "R\u00e9ductions de valeur act\u00e9es": {}, - "Valeur d'acquisition": {} - }, - "Autres cr\u00e9ances": { - "Cr\u00e9ances douteuses": {}, - "Cr\u00e9ances en compte": {}, - "Effets \u00e0 recevoir": {}, - "R\u00e9ductions de valeur act\u00e9es": {}, - "Titres \u00e0 revenu fixe": {} - }, - "Cautionnements vers\u00e9s en num\u00e9raires": { - "Autres cautionnements vers\u00e9s en num\u00e9raires": {}, - "Eau": {}, - "Electricit\u00e9": {}, - "Gaz": {}, - "T\u00e9l\u00e9phone, t\u00e9lefax, t\u00e9lex": {} - }, - "Cr\u00e9ances sur des entreprises avec lesquelles il existe un lien de participation": { - "Cr\u00e9ances douteuses": {}, - "Cr\u00e9ances en compte": {}, - "Effets \u00e0 recevoir": {}, - "R\u00e9ductions de valeurs act\u00e9es": {}, - "Titres \u00e0 revenu fixe": {} - }, - "Cr\u00e9ances sur des entreprises li\u00e9es": { - "Cr\u00e9ances douteuses": {}, - "Cr\u00e9ances en compte": {}, - "Effets \u00e0 recevoir": {}, - "R\u00e9ductions de valeurs act\u00e9es": {}, - "Titres \u00e0 revenu fixes": {} - }, - "Participations dans des entreprises avec lesquelles il existe un lien de participation": { - "Montants non appel\u00e9s": {}, - "Plus-values act\u00e9es": {}, - "R\u00e9ductions de valeurs act\u00e9es": {}, - "Valeur d'acquisition": {} - }, - "Participations dans des entreprises li\u00e9es": { - "Montants non appel\u00e9s": {}, - "Plus-values act\u00e9es": {}, - "R\u00e9ductions de valeurs act\u00e9es": {}, - "Valeur d'acquisition": {} - } - }, - "IMMOBILISATIONS INCORPORELLES": { - "Acomptes vers\u00e9s": {}, - "Concessions, brevets, licences, savoir-faire, marques et droits similaires": { - "Amortissements sur concessions, brevets, etc...": {}, - "Concessions, brevets, licences, savoir-faire, marques, etc...": {}, - "Plus-values act\u00e9es sur concessions, brevets, etc...": {} - }, - "Frais de recherche et de d\u00e9veloppement": { - "Amortissements sur frais de recherche et de mise au point": {}, - "Frais de recherche et de mise au point": {}, - "Plus-values act\u00e9es sur frais de recherche et de mise au point": {} - }, - "Goodwill": { - "Amortissements sur goodwill": {}, - "Co\u00fbt d'acquisition": {}, - "Plus-values act\u00e9es": {} - } - }, - "INSTALLATIONS, MACHINES ET OUTILLAGE": { - "Amortissements": { - "Sur installations": {}, - "Sur machines": {}, - "Sur outillage": {} - }, - "Installations": { - "Installation d'eau": {}, - "Installation d'\u00e9lectricit\u00e9": {}, - "Installation de chargement": {}, - "Installation de chauffage": {}, - "Installation de conditionnement d'air": {}, - "Installation de gaz": {}, - "Installation de vapeur": {} - }, - "Machines": { - "Division A": {}, - "Division B": {} - }, - "Outillage": { - "Division A": {}, - "Division B": {} - }, - "Plus-values act\u00e9es": { - "Sur installations": {}, - "Sur machines": {}, - "Sur outillage": {} - } - }, - "MOBILIER ET MATERIEL ROULANT": { - "Mat\u00e9riel roulant": { - "Amortissements sur mat\u00e9riel roulant": { - "Amortissements sur mat\u00e9riel automobile": {}, - "Idem sur mat\u00e9riel a\u00e9rien": {}, - "Idem sur mat\u00e9riel ferroviaire": {}, - "Idem sur mat\u00e9riel fluvial": {}, - "Idem sur mat\u00e9riel naval": {} - }, - "Mat\u00e9riel automobile": { - "Camions": {}, - "Voitures": {} - }, - "Mat\u00e9riel a\u00e9rien": {}, - "Mat\u00e9riel ferroviaire": {}, - "Mat\u00e9riel fluvial": {}, - "Mat\u00e9riel naval": {}, - "Plus-values sur mat\u00e9riel roulant": { - "Idem sur mat\u00e9riel a\u00e9rien": {}, - "Idem sur mat\u00e9riel ferroviaire": {}, - "Idem sur mat\u00e9riel fluvial": {}, - "Idem sur mat\u00e9riel naval": {}, - "Plus-values sur mat\u00e9riel automobile": {} - } - }, - "Mobilier": { - "Amortissements": { - "Amortissements sur mat\u00e9riel de bureau et service social": {}, - "Amortissements sur mobilier": {} - }, - "Mat\u00e9riel de bureau et de service social": { - "Des autres b\u00e2timents d'exploitation": {}, - "Des b\u00e2timents administratifs et commerciaux": {}, - "Des b\u00e2timents industriels": {}, - "Des oeuvres sociales": {} - }, - "Mobilier": { - "Mobilier des autres b\u00e2timents d'exploitation": {}, - "Mobilier des b\u00e2timents administratifs et commerciaux": {}, - "Mobilier des b\u00e2timents industriels": {}, - "Mobilier oeuvres sociales": {} - }, - "Plus-values act\u00e9es": { - "Plus-values act\u00e9es sur mat\u00e9riel de bureau et service social": {}, - "Plus-values act\u00e9es sur mobilier": {} - } - } - }, - "TERRAINS ET CONSTRUCTIONS": { - "Autres droits r\u00e9els sur des immeubles": { - "Amortissements": {}, - "Plus-values act\u00e9es": {}, - "Valeur d'acquisition": {} - }, - "Constructions": { - "Amortissements sur constructions": { - "Sur autres b\u00e2timents d'exploitation": {}, - "Sur b\u00e2timents administratifs et commerciaux": {}, - "Sur b\u00e2timents industriels": {}, - "Sur constructions sur sol d'autrui": {}, - "Sur frais d'acquisition sur constructions": {}, - "Sur voies de transport et ouvrages d'art": {} - }, - "Autres b\u00e2timents d'exploitation": {}, - "B\u00e2timents administratifs et commerciaux": {}, - "B\u00e2timents industriels": {}, - "Constructions sur sol d'autrui": {}, - "Frais d'acquisition sur constructions": {}, - "Plus-values act\u00e9es": { - "Sur autres b\u00e2timents d'exploitation": {}, - "Sur b\u00e2timents administratifs et commerciaux": {}, - "Sur b\u00e2timents industriels": {}, - "Sur voies de transport et ouvrages d'art": {} - }, - "Voies de transport et ouvrages d'art": {} - }, - "Terrains": { - "Amortissements et r\u00e9ductions de valeur": { - "Amortissements sur frais d'acquisition": {}, - "R\u00e9ductions de valeur sur terrains": {} - }, - "Frais d'acquisition sur terrains": {}, - "Plus-values act\u00e9es sur terrains": {}, - "Terrains": {} - }, - "Terrains b\u00e2tis": { - "Amortissements sur terrains b\u00e2tis": { - "Sur autres b\u00e2timents d'exploitation": {}, - "Sur b\u00e2timents administratifs et commerciaux": {}, - "Sur b\u00e2timents industriels": {}, - "Sur frais d'acquisition des terrains b\u00e2tis": {}, - "Sur voies de transport et ouvrages d'art": {} - }, - "Plus-values act\u00e9es": { - "Sur autres b\u00e2timents d'exploitation": {}, - "Sur b\u00e2timents administratifs et commerciaux": {}, - "Sur b\u00e2timents industriels": {}, - "Sur voies de transport et ouvrages d'art": {} - }, - "Valeur d'acquisition": { - "Autres b\u00e2timents d'exploitation": {}, - "B\u00e2timents administratifs et commerciaux": {}, - "B\u00e2timents industriels": {}, - "Frais d'acquisition des terrains \u00e0 b\u00e2tir": {}, - "Voies de transport et ouvrages d'art": {} - } - } - }, - "root_type": "" - }, - "CLASSE 3. STOCK ET COMMANDES EN COURS D'EXECUTION": { - "ACOMPTES VERSES SUR ACHATS POUR STOCKS": { - "Acomptes vers\u00e9s": { - "account_type": "Stock" - }, - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "APPROVISIONNEMENTS - MATIERES PREMIERES": { - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Stock" - }, - "Valeur d'acquisition": { - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "APPROVISIONNEMENTS ET FOURNITURES": { - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Stock" - }, - "Valeur d'acquisition": { - "Emballages commerciaux": { - "Emballages perdus": { - "account_type": "Stock" - }, - "Emballages r\u00e9cup\u00e9rables": { - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "Energie, charbon, coke, Mazout, essence, propane": { - "account_type": "Stock" - }, - "Fournitures de services sociaux": { - "account_type": "Stock" - }, - "Fournitures diverses et petit outillage": { - "account_type": "Stock" - }, - "Imprim\u00e9s et fournitures de bureau": { - "account_type": "Stock" - }, - "Mati\u00e8res d'approvisionnement": { - "account_type": "Stock" - }, - "Produits d'entretien": { - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "COMMANDES EN COURS D'EXECUTION": { - "B\u00e9n\u00e9fice pris en compte": { - "account_type": "Stock" - }, - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Stock" - }, - "Valeur d'acquisition": { - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "EN COURS DE FABRICATION": { - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Stock" - }, - "Valeur d'acquisition": { - "D\u00e9chets": { - "account_type": "Stock" - }, - "Produits en cours de fabrication": { - "account_type": "Stock" - }, - "Produits semi-ouvr\u00e9s": { - "account_type": "Stock" - }, - "Rebuts": { - "account_type": "Stock" - }, - "Travaux en association momentan\u00e9e": { - "account_type": "Stock" - }, - "Travaux en cours": { - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "IMMEUBLES DESTINES A LA VENTE": { - "Immeubles construits en vue de leur revente": { - "Immeuble A": { - "account_type": "Stock" - }, - "Immeuble B": { - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "R\u00e9ductions de valeurs act\u00e9es": { - "account_type": "Stock" - }, - "Valeur d'acquisition": { - "Immeuble A": { - "account_type": "Stock" - }, - "Immeuble B": { - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "MARCHANDISES": { - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Stock" - }, - "Valeur d'acquisition": { - "Groupe A": { - "account_type": "Stock" - }, - "Groupe B": { - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "PRODUITS FINIS": { - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Stock" - }, - "Valeur d'acquisition": { - "Produits finis": { - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "account_type": "Stock" - }, - "account_type": "Stock", - "root_type": "" - }, - "CLASSE 4. CREANCES ET DETTES A UN AN AU PLUS": { - "ACOMPTES RECUS SUR COMMANDES": { - "account_type": "Payable" - }, - "AUTRES CREANCES": { - "Capital appel\u00e9, non vers\u00e9": { - "Actionnaires d\u00e9faillants": { - "account_type": "Receivable" - }, - "Appels de fonds": { - "account_type": "Receivable" - } - }, - "Cautionnements vers\u00e9s en num\u00e9raires": { - "account_type": "Receivable" - }, - "Cr\u00e9ances diverses": { - "Associ\u00e9s": { - "account_type": "Receivable" - }, - "Avances et pr\u00eats au personnel": { - "account_type": "Receivable" - }, - "Compte courant des administrateurs et g\u00e9rants": { - "account_type": "Receivable" - }, - "Compte courant des associ\u00e9s en S.P.R.L.": { - "account_type": "Receivable" - }, - "Cr\u00e9ances sur soci\u00e9t\u00e9s apparent\u00e9es": { - "account_type": "Receivable" - }, - "Emballages et mat\u00e9riel \u00e0 rendre": { - "account_type": "Receivable" - }, - "Etat et \u00e9tablissements publics": { - "Autres cr\u00e9ances": { - "account_type": "Receivable" - }, - "Subsides \u00e0 recevoir": { - "account_type": "Receivable" - } - }, - "Rabais, ristournes, remises \u00e0 obtenir et autres avoirs non encore re\u00e7us": { - "account_type": "Receivable" - } - }, - "Cr\u00e9ances douteuses": { - "account_type": "Receivable" - }, - "Imp\u00f4ts et versements fiscaux \u00e0 r\u00e9cup\u00e9rer": { - "Imp\u00f4ts \u00e9trangers": { - "account_type": "Receivable" - }, - "\u00e0 4124 Imp\u00f4ts belges sur le r\u00e9sultat": { - "account_type": "Receivable" - }, - "\u00e0 4127 Autres imp\u00f4ts belges": { - "account_type": "Receivable" - } - }, - "Produits \u00e0 recevoir": { - "account_type": "Receivable" - }, - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Receivable" - }, - "T.V.A. \u00e0 r\u00e9cup\u00e9rer": { - "Compte courant administration T.V.A.": { - "account_type": "Receivable" - }, - "T.V.A D\u00e9ductible": { - "account_type": "Receivable" - }, - "Taxe d'\u00e9galisation due": { - "account_type": "Receivable" - } - } - }, - "COMPTES DE REGULARISATION ET COMPTES D'ATTENTE": { - "Charges \u00e0 imputer": { - "account_type": "Payable" - }, - "Charges \u00e0 reporter": { - "account_type": "Payable" - }, - "Comptes d'attente": { - "Compte d'attente": { - "account_type": "Payable" - }, - "Compte de r\u00e9partition p\u00e9riodique des charges": { - "account_type": "Payable" - }, - "Transferts d'exercice": { - "account_type": "Payable" - } - }, - "Produits acquis": { - "Produits d'exploitation": { - "Autres produits d'exploitation": { - "account_type": "Payable" - }, - "Commissions \u00e0 obtenir": { - "account_type": "Payable" - }, - "Ristournes, rabais \u00e0 obtenir": { - "account_type": "Payable" - } - }, - "Produits financiers": { - "Autres produits financiers": { - "account_type": "Payable" - }, - "Int\u00e9r\u00eats courus et non \u00e9chus sur pr\u00eats et d\u00e9bits": { - "account_type": "Payable" - } - } - }, - "Produits \u00e0 reporter": { - "Produits d'exploitation \u00e0 reporter": { - "account_type": "Payable" - }, - "Produits financiers \u00e0 reporter": { - "account_type": "Payable" - } - } - }, - "CREANCES COMMERCIALES": { - "Acomptes vers\u00e9s": { - "account_type": "Receivable" - }, - "Clients": { - "Clients": { - "account_type": "Receivable" - }, - "Cr\u00e9ances r\u00e9sultant de livraisons de biens": { - "account_type": "Receivable" - }, - "Rabais, remises, ristournes \u00e0 accorder et autres notes de cr\u00e9dit \u00e0 \u00e9tablir": { - "account_type": "Receivable" - } - }, - "Clients : retenues sur garanties": { - "account_type": "Receivable" - }, - "Clients, cr\u00e9ances courantes, entreprises apparent\u00e9es, administrateurs et g\u00e9rants": { - "Administrateurs et g\u00e9rants d'entreprise": { - "account_type": "Receivable" - }, - "Autres entreprises avec lesquelles il existe un lien de participation": { - "account_type": "Receivable" - }, - "Entreprises li\u00e9es": { - "account_type": "Receivable" - } - }, - "Compensation clients": { - "account_type": "Receivable" - }, - "Cr\u00e9ances douteuses": { - "account_type": "Receivable" - }, - "Effets \u00e0 recevoir": { - "Effets \u00e0 l'encaissement": { - "account_type": "Receivable" - }, - "Effets \u00e0 l'escompte": { - "account_type": "Receivable" - }, - "Effets \u00e0 recevoir": { - "account_type": "Receivable" - } - }, - "Effets \u00e0 recevoir sur entreprises apparent\u00e9es et administrateurs et g\u00e9rants": { - "Administrateurs et g\u00e9rants de l'entreprise": { - "account_type": "Receivable" - }, - "Autres entreprises avec lesquelles il existe un lien de participation": { - "account_type": "Receivable" - }, - "Entreprises li\u00e9es": { - "account_type": "Receivable" - } - }, - "Produits \u00e0 recevoir": { - "account_type": "Receivable" - }, - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Receivable" - } - }, - "DETTES A PLUS D'UN AN ECHEANT DANS L'ANNEE": { - "Autres emprunts": { - "account_type": "Payable" - }, - "Cautionnements re\u00e7us en num\u00e9raires": { - "account_type": "Payable" - }, - "Dettes commerciales": { - "Effets \u00e0 payer": { - "account_type": "Payable" - }, - "Fournisseurs": { - "account_type": "Payable" - } - }, - "Dettes de location-financement et assimil\u00e9es": { - "Financement de biens immobiliers": { - "account_type": "Payable" - }, - "Financement de biens mobiliers": { - "account_type": "Payable" - } - }, - "Dettes diverses": { - "Administrateurs, g\u00e9rants, associ\u00e9s": { - "account_type": "Payable" - }, - "Autres dettes": { - "account_type": "Payable" - }, - "Entreprises avec lesquelles il existe un lien de participation": { - "account_type": "Payable" - }, - "Entreprises li\u00e9es": { - "account_type": "Payable" - } - }, - "Emprunts obligataires non subordonn\u00e9s": { - "Convertibles": { - "account_type": "Payable" - }, - "Non convertibles": { - "account_type": "Payable" - } - }, - "Emprunts subordonn\u00e9s": { - "Convertibles": { - "account_type": "Payable" - }, - "Non convertibles": { - "account_type": "Payable" - } - }, - "Etablissements de cr\u00e9dit": { - "Cr\u00e9dits d'acceptation": { - "account_type": "Payable" - }, - "Dettes en compte": { - "account_type": "Payable" - }, - "Promesses": { - "account_type": "Payable" - } - } - }, - "DETTES COMMERCIALES": { - "Acomptes re\u00e7us": { - "account_type": "Payable" - }, - "Compensations fournisseurs": { - "account_type": "Payable" - }, - "Effets \u00e0 payer": { - "Entreprises apparent\u00e9es": { - "Entreprises avec lesquelles il existe un lien de participation": { - "account_type": "Payable" - }, - "Entreprises li\u00e9es": { - "account_type": "Payable" - } - }, - "Fournisseurs ordinaires": { - "Fournisseurs CEE": { - "account_type": "Payable" - }, - "Fournisseurs belges": { - "account_type": "Payable" - }, - "Fournisseurs importation": { - "account_type": "Payable" - } - } - }, - "Factures \u00e0 recevoir": { - "account_type": "Payable" - }, - "Fournisseurs": { - "Dettes envers les coparticipants": { - "account_type": "Payable" - }, - "Entreprises apparent\u00e9es": { - "Entreprises avec lesquelles il existe un lien de participation": { - "account_type": "Payable" - }, - "Entreprises li\u00e9es": { - "account_type": "Payable" - } - }, - "Fournisseurs - retenues de garanties": { - "account_type": "Payable" - }, - "Fournisseurs ordinaires": { - "Fournisseurs CEE": { - "account_type": "Payable" - }, - "Fournisseurs belges": { - "account_type": "Payable" - }, - "Fournisseurs importation": { - "account_type": "Payable" - } - } - } - }, - "DETTES DECOULANT DE L'AFFECTATION DES RESULTATS": { - "Autres allocataires": { - "account_type": "Payable" - }, - "Dividendes de l'exercice": { - "account_type": "Payable" - }, - "Dividendes et tanti\u00e8mes d'exercices ant\u00e9rieurs": { - "account_type": "Payable" - }, - "Tanti\u00e8mes de l'exercice": { - "account_type": "Payable" - } - }, - "DETTES DIVERSES": { - "Acomptes re\u00e7us d'autres tiers \u00e0 moins d'un an": { - "account_type": "Payable" - }, - "Actionnaires - capital \u00e0 rembourser": { - "account_type": "Payable" - }, - "Autres dettes diverses": { - "account_type": "Payable" - }, - "Cautionnements re\u00e7us en num\u00e9raires": { - "account_type": "Payable" - }, - "Emballages et mat\u00e9riel consign\u00e9s": { - "account_type": "Payable" - }, - "Obligations et coupons \u00e9chus": { - "account_type": "Payable" - }, - "Participation du personnel \u00e0 payer": { - "account_type": "Payable" - } - }, - "DETTES FINANCIERES": { - "Autres emprunts": { - "account_type": "Payable" - }, - "Etablissements de cr\u00e9dit. Cr\u00e9dits d'acceptation": { - "account_type": "Payable" - }, - "Etablissements de cr\u00e9dit. Dettes en compte courant": { - "account_type": "Payable" - }, - "Etablissements de cr\u00e9dit. Emprunts en compte \u00e0 terme fixe": { - "account_type": "Payable" - }, - "Etablissements de cr\u00e9dit. Promesses": { - "account_type": "Payable" - } - }, - "DETTES FISCALES, SALARIALES ET SOCIALES": { - "Autres dettes sociales": { - "Assurances relatives au personnel": { - "Assurance groupe ": { - "account_type": "Payable" - }, - "Assurance loi": { - "account_type": "Payable" - }, - "Assurance salaire garanti ": { - "account_type": "Payable" - }, - "Assurances individuelles": { - "account_type": "Payable" - } - }, - "Caisse d'assurances sociales pour travailleurs ind\u00e9pendants": { - "account_type": "Payable" - }, - "Dettes et provisions sociales diverses": { - "account_type": "Payable" - }, - "D\u00e9parts de personnel": { - "account_type": "Payable" - }, - "Oppositions sur r\u00e9mun\u00e9rations": { - "account_type": "Payable" - }, - "Provision pour gratifications de fin d'ann\u00e9e": { - "account_type": "Payable" - } - }, - "Dettes fiscales estim\u00e9es": { - "Imp\u00f4ts \u00e0 l'\u00e9tranger": { - "account_type": "Payable" - }, - "\u00e0 4504 Imp\u00f4ts sur le r\u00e9sultat": { - "account_type": "Payable" - }, - "\u00e0 4507 Autres imp\u00f4ts en Belgique": { - "account_type": "Payable" - } - }, - "Imp\u00f4ts et taxes \u00e0 payer": { - "Autres imp\u00f4ts et taxes en Belgique": { - "Autres imp\u00f4ts et taxes \u00e0 payer": { - "account_type": "Payable" - }, - "Imp\u00f4ts communaux \u00e0 payer": { - "account_type": "Payable" - }, - "Imp\u00f4ts provinciaux \u00e0 payer": { - "account_type": "Payable" - }, - "Pr\u00e9compte immobilier": { - "account_type": "Payable" - } - }, - "Autres imp\u00f4ts sur le r\u00e9sultat": { - "account_type": "Payable" - }, - "Imp\u00f4ts et taxes \u00e0 l'\u00e9tranger": { - "account_type": "Payable" - } - }, - "Office National de la S\u00e9curit\u00e9 Sociale": { - "1er trimestre": { - "account_type": "Payable" - }, - "2\u00e8me trimestre": { - "account_type": "Payable" - }, - "3\u00e8me trimestre": { - "account_type": "Payable" - }, - "4\u00e8me trimestre": { - "account_type": "Payable" - }, - "Arri\u00e9r\u00e9s": { - "account_type": "Payable" - } - }, - "Pr\u00e9comptes retenus": { - "Autres pr\u00e9comptes retenus": { - "account_type": "Payable" - }, - "Pr\u00e9compte mobilier retenu sur dividendes attribu\u00e9s": { - "account_type": "Payable" - }, - "Pr\u00e9compte mobilier retenu sur int\u00e9r\u00eats pay\u00e9s": { - "account_type": "Payable" - }, - "Pr\u00e9compte professionnel retenu sur r\u00e9mun\u00e9rations": { - "account_type": "Payable" - }, - "Pr\u00e9compte professionnel retenu sur tanti\u00e8mes": { - "account_type": "Payable" - } - }, - "P\u00e9cules de vacances": { - "Direction": { - "account_type": "Payable" - }, - "Employ\u00e9s": { - "account_type": "Payable" - }, - "Ouvriers": { - "account_type": "Payable" - } - }, - "R\u00e9mun\u00e9rations": { - "Administrateurs, g\u00e9rants et commissaires": { - "account_type": "Payable" - }, - "Direction": { - "account_type": "Payable" - }, - "Employ\u00e9s": { - "account_type": "Payable" - }, - "Ouvriers": { - "account_type": "Payable" - } - }, - "T.V.A. \u00e0 payer": { - "Compte courant administration T.V.A.": { - "account_type": "Payable" - }, - "T.V.A. \u00e0 payer": { - "account_type": "Payable" - }, - "T.V.A. \u00e0 payer - Cocontractant": { - "account_type": "Receivable" - }, - "T.V.A. \u00e0 payer - Import": { - "account_type": "Receivable" - }, - "T.V.A. \u00e0 payer - Intra-communautaire": { - "account_type": "Receivable" - }, - "Taxe d'\u00e9galisation due": { - "account_type": "Payable" - } - } - }, - "root_type": "" - }, - "CLASSE 5. PLACEMENTS DE TRESORERIE ET DE VALEURS DISPONIBLES": { - "ACTIONS ET PARTS": { - "Montants non appel\u00e9s": { - "account_type": "Cash" - }, - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Cash" - }, - "Valeur d'acquisition": { - "account_type": "Cash" - } - }, - "ACTIONS PROPRES": { - "account_type": "Cash" - }, - "CAISSES": { - "Caisses - esp\u00e8ces": { - "Caisse principale": { - "account_type": "Cash" - } - }, - "Caisses - timbres": { - "account_type": "Cash" - } - }, - "DEPOTS A TERME": { - "D'un mois au plus": { - "account_type": "Cash" - }, - "De plus d'un an": { - "account_type": "Cash" - }, - "De plus d'un mois et \u00e0 un an au plus": { - "account_type": "Cash" - }, - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Cash" - } - }, - "ETABLISSEMENTS DE CREDIT.": { - "Comptes ouverts aupr\u00e8s des divers \u00e9tablissements": {} - }, - "OFFICE DES CHEQUES POSTAUX": { - "Ch\u00e8ques \u00e9mis": { - "account_type": "Cash" - }, - "Compte courant": { - "account_type": "Cash" - } - }, - "TITRES A REVENUS FIXES": { - "R\u00e9ductions de valeur act\u00e9es": { - "account_type": "Cash" - }, - "Valeur d'acquisition": { - "account_type": "Cash" - } - }, - "VALEURS ECHUES A L'ENCAISSEMENT": { - "Ch\u00e8ques \u00e0 encaisser": { - "account_type": "Cash" - }, - "Coupons \u00e0 encaisser": { - "account_type": "Cash" - } - }, - "VIREMENTS INTERNES": { - "account_type": "Cash" - }, - "root_type": "" - }, - "CLASSE 6. - CHARGES": { - "AFFECTATION DES RESULTATS": { - "Administrateurs ou g\u00e9rants": {}, - "Autres allocataires": {}, - "B\u00e9n\u00e9fice \u00e0 reporter": {}, - "Dotation aux autres r\u00e9serves": {}, - "Dotation \u00e0 la r\u00e9serve l\u00e9gale": {}, - "Perte report\u00e9e de l'exercice pr\u00e9c\u00e9dent": {}, - "R\u00e9mun\u00e9ration du capital": {} - }, - "AMORTISSEMENTS, REDUCTIONS DE VALEUR ET PROVISIONS POUR RISQUES ET CHARGES": { - "Dotations aux amortissements et aux r\u00e9ductions de valeur sur immobilisations": { - "Dotations aux amortissements sur frais d'\u00e9tablissement": {}, - "Dotations aux amortissements sur immobilisations corporelles": {}, - "Dotations aux amortissements sur immobilisations incorporelles": {}, - "Dotations aux r\u00e9ductions de valeur sur immobilisations corporelles": {}, - "Dotations aux r\u00e9ductions de valeur sur immobilisations incorporelles": {} - }, - "Provisions pour autres risques et charges": { - "Dotations ": {}, - "Utilisations et reprises": {} - }, - "Provisions pour grosses r\u00e9parations et gros entretiens": { - "Dotations": {}, - "Utilisations et reprises": {} - }, - "Provisions pour pensions et obligations similaires": { - "Dotations": {}, - "Utilisations et reprises": {} - }, - "R\u00e9ductions de valeur sur commandes en cours d'ex\u00e9cution": { - "Dotations": {}, - "Reprises": {} - }, - "R\u00e9ductions de valeur sur cr\u00e9ances commerciales \u00e0 plus d'un an": { - "Dotations": {}, - "Reprises": {} - }, - "R\u00e9ductions de valeur sur cr\u00e9ances commerciales \u00e0 un an au plus": { - "Dotations": {}, - "Reprises": {} - }, - "R\u00e9ductions de valeur sur stocks": { - "Dotations": {}, - "Reprises": {} - } - }, - "APPROVISIONNEMENTS ET MARCHANDISES": { - "Achats d'immeubles destin\u00e9s \u00e0 la revente": {}, - "Achats de fournitures": {}, - "Achats de marchandises": {}, - "Achats de mati\u00e8res premi\u00e8res": {}, - "Achats de services, travaux et \u00e9tudes": {}, - "Remises, ristournes et rabais obtenus sur achats": {}, - "Sous-traitances g\u00e9n\u00e9rales": {}, - "Variations de stocks": { - "D'immeubles destin\u00e9s \u00e0 la vente": {}, - "De fournitures": {}, - "De marchandises": {}, - "De mati\u00e8res premi\u00e8res": {} - } - }, - "AUTRES CHARGES D'EXPLOITATION": { - "Charges d'exploitation port\u00e9es \u00e0 l'actif au titre de restructuration": {}, - "Charges fiscales d'exploitation": { - "Imp\u00f4ts provinciaux et communaux": { - "Taxe sur la force motrice": {}, - "Taxe sur le personnel occup\u00e9": {} - }, - "Taxes diverses": {}, - "Taxes et imp\u00f4ts directs": { - "Taxes sur autos et camions": {} - }, - "Taxes et imp\u00f4ts indirects": { - "Droits d'enregistrement": {}, - "T.V.A. non d\u00e9ductible": {}, - "Timbres fiscaux pris en charge par la firme": {} - } - }, - "Moins-values sur r\u00e9alisations courantes d'immobilisations corporelles": {}, - "Moins-values sur r\u00e9alisations de cr\u00e9ances commerciales": {}, - "\u00e0 648 Charges d'exploitations diverses": {} - }, - "CHARGES EXCEPTIONNELLES": { - "Amortissements et r\u00e9ductions de valeur exceptionnels": { - "Sur frais d'\u00e9tablissement": {}, - "Sur immobilisations corporelles": {}, - "Sur immobilisations incorporelles": {} - }, - "Autres charges exceptionnelles": {}, - "Charges exceptionnelles transf\u00e9r\u00e9es \u00e0 l'actif en frais de restructuration": {}, - "Diff\u00e9rence de charge": {}, - "Moins-values sur r\u00e9alisation d'actifs immobilis\u00e9s": { - "Sur immeubles acquis ou construits en vue de la revente": {}, - "Sur immobilisations corporelles": {}, - "Sur immobilisations d\u00e9tenues en location-financement et droits similaires": {}, - "Sur immobilisations financi\u00e8res": {}, - "Sur immobilisations incorporelles": {} - }, - "Provisions pour risques et charges exceptionnels": {}, - "P\u00e9nalit\u00e9s et amendes diverses": {}, - "R\u00e9ductions de valeur sur immobilisations financi\u00e8res": {} - }, - "CHARGES FINANCIERES": { - "Charges d'escompte de cr\u00e9ances": {}, - "Charges des dettes": { - "Amortissements des agios et frais d'\u00e9mission d'emprunts": {}, - "Autres charges de dettes": {}, - "Int\u00e9r\u00eats intercalaires port\u00e9s \u00e0 l'actif": {}, - "Int\u00e9r\u00eats, commissions et frais aff\u00e9rents aux dettes": {} - }, - "Commissions sur ouvertures de cr\u00e9dit, cautions, avals": {}, - "Diff\u00e9rences de change": {}, - "Ecarts de conversion des devises": {}, - "Frais de banques, de ch\u00e8ques postaux": {}, - "Frais de vente des titres": {}, - "Moins-values sur r\u00e9alisation d'actifs circulants": {}, - "R\u00e9ductions de valeur sur actifs circulants": { - "Dotations ": {}, - "Reprises": {} - } - }, - "IMPOTS SUR LE RESULTAT": { - "Imp\u00f4ts belges sur le r\u00e9sultat d'exercices ant\u00e9rieurs": { - "Provisions fiscales constitu\u00e9es": {}, - "Suppl\u00e9ments d'imp\u00f4ts dus ou vers\u00e9s": {}, - "Suppl\u00e9ments d'imp\u00f4ts estim\u00e9s": {} - }, - "Imp\u00f4ts belges sur le r\u00e9sultat de l'exercice": { - "Charges fiscales estim\u00e9es": {}, - "Exc\u00e9dent de versements d'imp\u00f4ts et pr\u00e9comptes port\u00e9 \u00e0 l'actif": {}, - "Imp\u00f4ts et pr\u00e9comptes dus ou vers\u00e9s": {} - }, - "Imp\u00f4ts \u00e9trangers sur le r\u00e9sultat d'exercices ant\u00e9rieurs": {}, - "Imp\u00f4ts \u00e9trangers sur le r\u00e9sultat de l'exercice": {} - }, - "REMUNERATIONS, CHARGES SOCIALES ET PENSIONS": { - "Autres frais de personnel": { - "Assurances du personnel": { - "Assurance salaire garanti": {}, - "Assurances individuelles": {}, - "Assurances loi, responsabilit\u00e9 civile, chemin du travail": {} - }, - "Charges sociales des administrateurs, g\u00e9rants et commissaires": { - "Allocations familiales compl\u00e9mentaires pour non salari\u00e9s": {}, - "Divers": {}, - "Lois sociales pour ind\u00e9pendants": {} - }, - "Charges sociales diverses": { - "Allocations familiales compl\u00e9mentaires": {}, - "Jours f\u00e9ri\u00e9s pay\u00e9s": {}, - "Salaire hebdomadaire garanti": {} - } - }, - "Cotisations patronales d'assurances sociales": { - "Sur appointements et commissions": {}, - "Sur salaires": {} - }, - "Pensions de retraite et de survie": { - "Administrateurs et g\u00e9rants": {}, - "Personnel": {} - }, - "Primes patronales pour assurances extral\u00e9gales": {}, - "Provision pour p\u00e9cule de vacances": { - "Dotations": {}, - "Utilisations et reprises": {} - }, - "R\u00e9mun\u00e9rations et avantages sociaux directs": { - "Administrateurs ou g\u00e9rants": {}, - "Autres membres du personnel": {}, - "Employ\u00e9s": {}, - "Ouvriers": {}, - "Personnel de direction": {} - } - }, - "SERVICES ET BIENS DIVERS": { - "Annonces, publicit\u00e9, propagande et documentation": { - "Annonces et insertions": {}, - "Cadeaux \u00e0 la client\u00e8le": {}, - "Catalogues et imprim\u00e9s": {}, - "Documentation": {}, - "Echantillons": {}, - "Foires et expositions": {}, - "Missions et r\u00e9ceptions": {}, - "Primes": {} - }, - "Entretien et r\u00e9paration": {}, - "Fournitures faites \u00e0 l'entreprise": { - "Eau, gaz, \u00e9lectricit\u00e9, vapeur": { - "Eau": {}, - "Electricit\u00e9": {}, - "Gaz": {}, - "Vapeur": {} - }, - "Imprim\u00e9s et fournitures de bureau": {}, - "Livres, biblioth\u00e8que": {}, - "T\u00e9l\u00e9phone, t\u00e9l\u00e9grammes, t\u00e9lex, t\u00e9l\u00e9fax, frais postaux": { - "Frais postaux": {}, - "T\u00e9lex et t\u00e9l\u00e9fax": {}, - "T\u00e9l\u00e9grammes": {}, - "T\u00e9l\u00e9phone": {} - } - }, - "Loyers et charges locatives": { - "Charges locatives": {}, - "Loyers divers": {} - }, - "Personnel int\u00e9rimaire et personnes mises \u00e0 la disposition de l'entreprise": {}, - "R\u00e9mun\u00e9rations, primes pour assurances extral\u00e9gales": {}, - "R\u00e9tributions de tiers": { - "Assurances non relatives au personnel": { - "Assurance autos": {}, - "Assurance cr\u00e9dit": {}, - "Assurance incendie": {}, - "Assurance vol": {}, - "Assurances frais g\u00e9n\u00e9raux": {} - }, - "Divers": { - "Commissions aux tiers": {}, - "Cotisations aux groupements professionnels": {}, - "Dons, lib\u00e9ralit\u00e9s, ...": {}, - "Frais de contentieux": {}, - "Honoraires d'avocats, d'experts, etc ...": {}, - "Publications l\u00e9gales": {} - }, - "Personnel int\u00e9rimaire": {}, - "Redevances et royalties": { - "Autres redevances": {}, - "Redevances pour brevets, licences, marques, accessoires": {} - }, - "Transports et d\u00e9placements": { - "Transports de personnel": {}, - "Voyages, d\u00e9placements, repr\u00e9sentations": {} - } - }, - "Sous-traitants": { - "Quote-part b\u00e9n\u00e9ficiaire des coparticipants": {}, - "Sous-traitants d'associations momentan\u00e9es": {}, - "Sous-traitants pour activit\u00e9s propres": {} - } - }, - "TRANSFERTS AUX RESERVES IMMUNISEES": {}, - "root_type": "" - }, - "CLASSE 7. - PRODUITS": { - "AFFECTATION AUX RESULTATS": { - "B\u00e9n\u00e9fice report\u00e9 de l'exercice pr\u00e9c\u00e9dent": {}, - "Intervention d'associ\u00e9s": {}, - "Perte \u00e0 reporter": {}, - "Pr\u00e9l\u00e8vement sur le capital et les primes d'\u00e9mission": {}, - "Pr\u00e9l\u00e8vement sur les r\u00e9serves": {} - }, - "AUTRES PRODUITS D'EXPLOITATION": { - "Commissions et courtages": {}, - "Locations diverses \u00e0 caract\u00e8re professionnel": {}, - "Plus-values sur r\u00e9alisations courantes d'immobilisations corporelles": {}, - "Plus-values sur r\u00e9alisations de cr\u00e9ances commerciales": {}, - "Prestations de services": {}, - "Produits de services exploit\u00e9s dans l'int\u00e9r\u00eat du personnel": {}, - "Produits divers": { - "Bonis sur reprises d'emballages consign\u00e9s": {}, - "Bonis sur travaux en associations momentan\u00e9es": {} - }, - "Redevances pour brevets et licences": {}, - "Revenus des immeubles affect\u00e9s aux activit\u00e9s non professionnelles": {}, - "Subsides d'exploitation et montants compensatoires": {} - }, - "CHIFFRE D'AFFAIRES": { - "Facturations des travaux en cours": {}, - "Prestations de services": { - "Prestations de services dans les pays membres de la C.E.E.": {}, - "Prestations de services en Belgique": {}, - "Prestations de services en vue de l'exportation": {} - }, - "P\u00e9nalit\u00e9s et d\u00e9dits obtenus par l'entreprise": {}, - "Remises, ristournes et rabais accord\u00e9s": { - "Mali sur travaux factur\u00e9s aux associations momentan\u00e9es": {}, - "Sur prestations de services": {}, - "Sur ventes de d\u00e9chets et rebuts": {}, - "Sur ventes de marchandises": {}, - "Sur ventes de produits finis": {} - }, - "Ventes d'emballages r\u00e9cup\u00e9rables": {}, - "Ventes de d\u00e9chets et rebuts": { - "Ventes dans les pays membres de la C.E.E.": {}, - "Ventes en Belgique": {}, - "Ventes \u00e0 l'exportation": {} - }, - "Ventes de marchandises": { - "Ventes dans les pays membres de la C.E.E.": {}, - "Ventes en Belgique": {}, - "Ventes \u00e0 l'exportation": {} - }, - "Ventes de produits finis": { - "Ventes dans les pays membres de la C.E.E.": {}, - "Ventes en Belgique": {}, - "Ventes \u00e0 l'exportation": {} - } - }, - "PRODUCTION IMMOBILISEE": { - "En frais d'\u00e9tablissement": {}, - "En immobilisations corporelles": {}, - "En immobilisations en cours": {}, - "En immobilisations incorporelles": {} - }, - "PRODUITS EXCEPTIONNELS": { - "Autres produits exceptionnels": {}, - "Plus-values sur r\u00e9alisation d'actifs immobilis\u00e9s": { - "Sur immobilisations corporelles": {}, - "Sur immobilisations financi\u00e8res": {}, - "Sur immobilisations incorporelles": {} - }, - "Reprises d'amortissements et de r\u00e9ductions de valeur": { - "Sur immobilisations corporelles": {}, - "Sur immobilisations incorporelles": {} - }, - "Reprises de provisions pour risques et charges exceptionnelles": {}, - "Reprises de r\u00e9ductions de valeur sur immobilisations financi\u00e8res": {} - }, - "PRODUITS FINANCIERS": { - "Diff\u00e9rences de change": {}, - "Ecarts de conversion des devises": {}, - "Escomptes obtenus": {}, - "Plus-values sur r\u00e9alisations d'actifs circulants": {}, - "Produits des actifs circulants": {}, - "Produits des autres cr\u00e9ances": {}, - "Produits des immobilisations financi\u00e8res": { - "Revenus des actions": {}, - "Revenus des cr\u00e9ances \u00e0 plus d'un an": {}, - "Revenus des obligations": {} - }, - "Subsides en capital et en int\u00e9r\u00eats": {} - }, - "REGULARISATIONS D'IMPOTS ET REPRISES DE PROVISIONS FISCALES": { - "Imp\u00f4ts belges sur le r\u00e9sultat": { - "Reprises de provisions fiscales": {}, - "R\u00e9gularisations d'imp\u00f4ts dus ou vers\u00e9s": {}, - "R\u00e9gularisations d'imp\u00f4ts estim\u00e9s": {} - }, - "Imp\u00f4ts \u00e9trangers sur le r\u00e9sultat": {} - }, - "VARIATION DES STOCKS ET DES COMMANDES EN COURS D'EXECUTION": { - "Des commandes en cours d'ex\u00e9cution": { - "B\u00e9n\u00e9fices port\u00e9s en compte sur commandes en cours": { - "Sur commandes en cours d'ex\u00e9cution": {}, - "Sur travaux en cours des associations momentan\u00e9es": {} - }, - "Commandes en cours - Co\u00fbt de revient": { - "Co\u00fbt des commandes en cours d'ex\u00e9cution": {}, - "Co\u00fbt des travaux en cours des associations momentan\u00e9es": {} - } - }, - "Des en cours de fabrication": {}, - "Des immeubles construits destin\u00e9s \u00e0 la vente": {}, - "Des produits finis": {} - }, - "root_type": "" - } - } -} diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_minimum_genormaliseerd_rekeningstelsel_ondernemingen.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_minimum_genormaliseerd_rekeningstelsel_ondernemingen.json new file mode 100644 index 00000000000..21a48c71db7 --- /dev/null +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_minimum_genormaliseerd_rekeningstelsel_ondernemingen.json @@ -0,0 +1,1597 @@ +{ + "country_code": "be", + "name": "België - Minimum genormaliseerd algemeen rekeningstelsel voor ondernemingen", + "tree": { + "KLASSE 1 : EIGEN VERMOGEN": { + "root_type": "Equity", + "Kapitaal": { + "Geplaatst kapitaal": { + "account_number": "100", + "account_type": "Equity" + }, + "Niet opgevraagd kapitaal (-)": { + "account_number": "101", + "account_type": "Equity" + }, + "account_number": "10", + "account_type": "Equity" + }, + "Inbreng buiten kapitaal": { + "Beschikbare inbreng buiten kapitaal": { + "Uitgiftepremie": { + "account_number": "1100", + "account_type": "Equity" + }, + "Andere": { + "account_number": "1109", + "account_type": "Equity" + }, + "account_number": "110", + "account_type": "Equity" + }, + "Onbeschikbare inbreng buiten kapitaal": { + "Uitgiftepremie": { + "account_number": "1110", + "account_type": "Equity" + }, + "Andere": { + "account_number": "1119", + "account_type": "Equity" + }, + "account_number": "111", + "account_type": "Equity" + }, + "account_number": "11", + "account_type": "Equity" + }, + "Herwaarderingsmeerwaarden": { + "Herwaarderingsmeerwaarden op immateriële vaste activa": { + "account_number": "120", + "account_type": "Equity" + }, + "Herwaarderingsmeerwaarden op materiële vaste activa": { + "account_number": "121", + "account_type": "Equity" + }, + "Herwaarderingsmeerwaarden op financiële vaste activa": { + "account_number": "122", + "account_type": "Equity" + }, + "Herwaarderingsmeerwaarden op voorraden": { + "account_number": "123", + "account_type": "Equity" + }, + "Terugneming van waardeverminderingen op geldbeleggingen": { + "account_number": "124", + "account_type": "Equity" + }, + "account_number": "12", + "account_type": "Equity" + }, + "Reserves": { + "Wettelijke reserves": { + "account_number": "130", + "account_type": "Equity" + }, + "Andere onbeschikbare reserves": { + "Statutair onbeschikbare reserves": { + "account_number": "1311", + "account_type": "Equity" + }, + "Reserve voor eigen aandelen": { + "account_number": "1312", + "account_type": "Equity" + }, + "Financiële steunverlening": { + "account_number": "1313", + "account_type": "Equity" + }, + "Overige": { + "account_number": "1319", + "account_type": "Equity" + }, + "account_number": "131", + "account_type": "Equity" + }, + "Belastingvrije reserves": { + "account_number": "132", + "account_type": "Equity" + }, + "Beschikbare reserves": { + "account_number": "133", + "account_type": "Equity" + }, + "account_number": "13", + "account_type": "Equity" + }, + "Overgedragen winst of Overgedragen verlies (-)": { + "account_number": "14", + "account_type": "Equity" + }, + "Kapitaalsubsidies": { + "account_number": "15", + "account_type": "Equity" + } + }, + "KLASSE 1 : VOORZIENINGEN, UITGESTELDE BELASTINGEN EN SCHULDEN OP MEER DAN ÉÉN JAAR": { + "root_type": "Liability", + "Voorzieningen en uitgestelde belastingen": { + "Voorzieningen voor pensioenen en soortgelijke verplichtingen": { + "account_number": "160", + "account_type": "Liability" + }, + "Voorzieningen voor belastingen": { + "account_number": "161", + "account_type": "Liability" + }, + "Voorzieningen voor grote herstellingswerken en grote onderhoudswerken": { + "account_number": "162", + "account_type": "Liability" + }, + "Voorzieningen voor milieuverplichtingen": { + "account_number": "163", + "account_type": "Liability" + }, + "Uitgestelde belastingen": { + "Uitgestelde belastingen op kapitaalsubsidies": { + "account_number": "1680", + "account_type": "Liability" + }, + "Uitgestelde belastingen op gerealiseerde meerwaarden op immateriële vaste activa": { + "account_number": "1681", + "account_type": "Liability" + }, + "Uitgestelde belastingen op gerealiseerde meerwaarden op materiële vaste activa": { + "account_number": "1682", + "account_type": "Liability" + }, + "Uitgestelde belastingen op gerealiseerde meerwaarden op effecten die zijn uitgegeven door de Belgische openbare sector": { + "account_number": "1687", + "account_type": "Liability" + }, + "Buitenlandse uitgestelde belastingen": { + "account_number": "1688", + "account_type": "Liability" + }, + "account_number": "168", + "account_type": "Liability" + }, + "account_number": "16", + "account_type": "Liability" + }, + "Schulden op meer dan één jaar": { + "Achtergestelde leningen": { + "Converteerbaar": { + "account_number": "1700", + "account_type": "Liability" + }, + "Niet converteerbaar": { + "account_number": "1701", + "account_type": "Liability" + }, + "account_number": "170", + "account_type": "Liability" + }, + "Niet-achtergestelde obligatieleningen": { + "Converteerbaar": { + "account_number": "1710", + "account_type": "Liability" + }, + "Niet converteerbaar": { + "account_number": "1711", + "account_type": "Liability" + }, + "account_number": "171", + "account_type": "Liability" + }, + "Leasingschulden en soortgelijke schulden": { + "account_number": "172", + "account_type": "Liability" + }, + "Kredietinstellingen": { + "Schulden op rekening": { + "account_number": "1730", + "account_type": "Liability" + }, + "Promessen": { + "account_number": "1731", + "account_type": "Liability" + }, + "Acceptkredieten": { + "account_number": "1732", + "account_type": "Liability" + }, + "account_number": "173", + "account_type": "Liability" + }, + "Overige leningen": { + "account_number": "174", + "account_type": "Liability" + }, + "Handelsschulden": { + "Leveranciers": { + "account_number": "1750", + "account_type": "Liability" + }, + "Te betalen wissels": { + "account_number": "1751", + "account_type": "Liability" + }, + "account_number": "175", + "account_type": "Liability" + }, + "Vooruitbetalingen op bestellingen": { + "account_number": "176", + "account_type": "Liability" + }, + "Borgtochten ontvangen in contanten": { + "account_number": "178", + "account_type": "Liability" + }, + "Overige schulden": { + "account_number": "179", + "account_type": "Liability" + }, + "account_number": "17", + "account_type": "Liability" + }, + "Voorschot aan de vennoten op de verdeling van het netto-actief (-)": { + "account_number": "19", + "account_type": "Liability" + } + }, + "KLASSE 2 : OPRICHTINGSKOSTEN, VASTE ACTIVA EN VORDERINGEN OP MEER DAN ÉÉN JAAR": { + "root_type": "Asset", + "Oprichtingskosten": { + "Kosten van oprichting, kapitaalverhoging of verhoging van de inbreng": { + "account_number": "200", + "account_type": "Fixed Asset" + }, + "Kosten bij uitgifte van leningen": { + "account_number": "201", + "account_type": "Fixed Asset" + }, + "Overige oprichtingskosten": { + "account_number": "202", + "account_type": "Fixed Asset" + }, + "Herstructureringskosten": { + "account_number": "204", + "account_type": "Fixed Asset" + }, + "account_number": "20", + "account_type": "Fixed Asset" + }, + "Immateriële vaste activa": { + "Kosten van onderzoek en ontwikkeling": { + "account_number": "210", + "account_type": "Fixed Asset" + }, + "Concessies, octrooien, licenties, know-how, merken en soortgelijke rechten": { + "account_number": "211", + "account_type": "Fixed Asset" + }, + "Goodwill": { + "account_number": "212", + "account_type": "Fixed Asset" + }, + "Vooruitbetalingen": { + "account_number": "213", + "account_type": "Fixed Asset" + }, + "Geboekte afschrijvingen en waardeverminderingen (-)": { + "account_number": "219", + "account_type": "Accumulated Depreciation" + }, + "account_number": "21", + "account_type": "Fixed Asset" + }, + "Terreinen en gebouwen": { + "Terreinen": { + "account_number": "220", + "account_type": "Fixed Asset" + }, + "Gebouwen": { + "account_number": "221", + "account_type": "Fixed Asset" + }, + "Bebouwde terreinen": { + "account_number": "222", + "account_type": "Fixed Asset" + }, + "Overige zakelijke rechten op onroerende goederen": { + "account_number": "223", + "account_type": "Fixed Asset" + }, + "Geboekte afschrijvingen en waardeverminderingen (-)": { + "account_number": "229", + "account_type": "Accumulated Depreciation" + }, + "account_number": "22", + "account_type": "Fixed Asset" + }, + "Installaties, machines en uitrusting": { + "account_number": "23", + "account_type": "Fixed Asset" + }, + "Meubilair en rollend materieel": { + "account_number": "24", + "account_type": "Fixed Asset" + }, + "Vaste activa in leasing of op grond van een soortgelijk recht": { + "Terreinen en gebouwen": { + "account_number": "250", + "account_type": "Fixed Asset" + }, + "Installaties, machines en uitrusting": { + "account_number": "251", + "account_type": "Fixed Asset" + }, + "Meubilair en rollend materieel": { + "account_number": "252", + "account_type": "Fixed Asset" + }, + "Geboekte afschrijvingen en waardeverminderingen (-)": { + "account_number": "259", + "account_type": "Accumulated Depreciation" + }, + "account_number": "25", + "account_type": "Fixed Asset" + }, + "Overige materiële vaste activa": { + "account_number": "26", + "account_type": "Fixed Asset" + }, + "Vaste activa in aanbouw en vooruitbetalingen": { + "account_number": "27", + "account_type": "Fixed Asset" + }, + "Financiële vaste activa": { + "Deelnemingen in verbonden ondernemingen": { + "Aanschaffingswaarde": { + "account_number": "2800", + "account_type": "Fixed Asset" + }, + "Nog te storten bedragen (-)": { + "account_number": "2801", + "account_type": "Fixed Asset" + }, + "Geboekte meerwaarden": { + "account_number": "2808", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2809", + "account_type": "Fixed Asset" + }, + "account_number": "280", + "account_type": "Fixed Asset" + }, + "Vorderingen op verbonden ondernemingen": { + "Vorderingen op rekening": { + "account_number": "2810", + "account_type": "Fixed Asset" + }, + "Te innen wissels": { + "account_number": "2811", + "account_type": "Fixed Asset" + }, + "Vastrentende effecten": { + "account_number": "2812", + "account_type": "Fixed Asset" + }, + "Dubieuze debiteuren": { + "account_number": "2817", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2819", + "account_type": "Fixed Asset" + }, + "account_number": "281", + "account_type": "Fixed Asset" + }, + "Deelnemingen in ondernemingen waarmee een deelnemingsverhouding bestaat": { + "Aanschaffingswaarde": { + "account_number": "2820", + "account_type": "Fixed Asset" + }, + "Nog te storten bedragen (-)": { + "account_number": "2821", + "account_type": "Fixed Asset" + }, + "Geboekte meerwaarden": { + "account_number": "2828", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2829", + "account_type": "Fixed Asset" + }, + "account_number": "282", + "account_type": "Fixed Asset" + }, + "Vorderingen op ondernemingen waarmee een deelnemingsverhouding bestaat": { + "Vorderingen op rekening": { + "account_number": "2830", + "account_type": "Fixed Asset" + }, + "Te innen wissels": { + "account_number": "2831", + "account_type": "Fixed Asset" + }, + "Vastrentende effecten": { + "account_number": "2832", + "account_type": "Fixed Asset" + }, + "Dubieuze debiteuren": { + "account_number": "2837", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2839", + "account_type": "Fixed Asset" + }, + "account_number": "283", + "account_type": "Fixed Asset" + }, + "Andere aandelen": { + "Aanschaffingswaarde": { + "account_number": "2840", + "account_type": "Fixed Asset" + }, + "Nog te storten bedragen (-)": { + "account_number": "2841", + "account_type": "Fixed Asset" + }, + "Geboekte meerwaarden": { + "account_number": "2848", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2849", + "account_type": "Fixed Asset" + }, + "account_number": "284", + "account_type": "Fixed Asset" + }, + "Overige vorderingen": { + "Vorderingen op rekening": { + "account_number": "2850", + "account_type": "Fixed Asset" + }, + "Te innen wissels": { + "account_number": "2851", + "account_type": "Fixed Asset" + }, + "Vastrentende effecten": { + "account_number": "2852", + "account_type": "Fixed Asset" + }, + "Dubieuze debiteuren": { + "account_number": "2857", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2859", + "account_type": "Fixed Asset" + }, + "account_number": "285", + "account_type": "Fixed Asset" + }, + "Borgtochten betaald in contanten": { + "account_number": "288", + "account_type": "Fixed Asset" + }, + "account_number": "28", + "account_type": "Fixed Asset" + }, + "Vorderingen op meer dan één jaar": { + "Handelsvorderingen": { + "Handelsdebiteuren": { + "account_number": "2900" + }, + "Te innen wissels": { + "account_number": "2901" + }, + "Vooruitbetalingen": { + "account_number": "2906" + }, + "Dubieuze debiteuren": { + "account_number": "2907" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2909" + }, + "account_number": "290" + }, + "Overige vorderingen": { + "Vorderingen op rekening": { + "account_number": "2910" + }, + "Te innen wissels": { + "account_number": "2911" + }, + "Dubieuze debiteuren": { + "account_number": "2917" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2919" + }, + "account_number": "291" + }, + "account_number": "29" + } + }, + "KLASSE 3 : VOORRADEN EN BESTELLINGEN IN UITVOERING": { + "root_type": "Asset", + "Grondstoffen": { + "Aanschaffingswaarde": { + "account_number": "300" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "309" + }, + "account_number": "30" + }, + "Hulpstoffen": { + "Aanschaffingswaarde": { + "account_number": "310" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "319" + }, + "account_number": "31" + }, + "Goederen in bewerking": { + "Aanschaffingswaarde": { + "account_number": "320" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "329" + }, + "account_number": "32" + }, + "Gereed product": { + "Aanschaffingswaarde": { + "account_number": "330" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "339" + }, + "account_number": "33" + }, + "Handelsgoederen": { + "Aanschaffingswaarde": { + "account_number": "340", + "account_type": "Stock" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "349" + }, + "account_number": "34", + "account_type": "Stock" + }, + "Onroerende goederen bestemd voor verkoop": { + "Aanschaffingswaarde": { + "account_number": "350" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "359" + }, + "account_number": "35" + }, + "Vooruitbetalingen op voorraadinkopen": { + "Vooruitbetalingen": { + "account_number": "360" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "369" + }, + "account_number": "36" + }, + "Bestellingen in uitvoering": { + "Aanschaffingswaarde": { + "account_number": "370" + }, + "Toegerekende winst": { + "account_number": "371" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "379" + }, + "account_number": "37" + }, + "Geleverde voorraad, niet gefactureerd": { + "account_type": "Stock Delivered But Not Billed" + } + }, + "KLASSE 4 : VORDERINGEN OP TEN HOOGSTE ÉÉN JAAR": { + "root_type": "Asset", + "Handelsvorderingen": { + "Handelsdebiteuren": { + "account_number": "400", + "account_type": "Receivable" + }, + "Te innen wissels": { + "account_number": "401", + "account_type": "Receivable" + }, + "Te innen opbrengsten": { + "account_number": "404", + "account_type": "Receivable" + }, + "Vooruitbetalingen": { + "account_number": "406" + }, + "Dubieuze debiteuren": { + "account_number": "407", + "account_type": "Receivable" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "409" + }, + "account_number": "40", + "account_type": "Receivable" + }, + "Overige vorderingen": { + "Opgevraagd, niet gestort kapitaal of inbreng": { + "account_number": "410" + }, + "Terug te vorderen btw": { + "account_number": "411", + "account_type": "Tax" + }, + "Terug te vorderen belastingen en voorheffingen": { + "Buitenlandse belastingen": { + "account_number": "4128" + }, + "account_number": "412" + }, + "Te innen opbrengsten": { + "account_number": "414" + }, + "Diverse vorderingen": { + "account_number": "416" + }, + "Dubieuze debiteuren": { + "account_number": "417" + }, + "Borgtochten betaald in contanten": { + "account_number": "418" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "419" + }, + "account_number": "41" + } + }, + "KLASSE 4 : SCHULDEN OP TEN HOOGSTE ÉÉN JAAR": { + "root_type": "Liability", + "Schulden op meer dan één jaar die binnen het jaar vervallen (16) (zelfde onderverdeling als 17)": { + "account_number": "42" + }, + "Financiële schulden": { + "Kredietinstellingen - Leningen op rekening met vaste termijn": { + "account_number": "430" + }, + "Kredietinstellingen - Promessen": { + "account_number": "431" + }, + "Kredietinstellingen - Acceptkredieten": { + "account_number": "432" + }, + "Kredietinstellingen - Schulden in rekening-courant": { + "account_number": "433" + }, + "Overige leningen": { + "account_number": "439" + }, + "account_number": "43" + }, + "Handelsschulden": { + "Leveranciers": { + "account_number": "440", + "account_type": "Payable" + }, + "Te betalen wissels": { + "account_number": "441", + "account_type": "Payable" + }, + "Te ontvangen facturen": { + "account_number": "444", + "account_type": "Stock Received But Not Billed" + }, + "account_number": "44", + "account_type": "Payable" + }, + "Schulden met betrekking tot belastingen, bezoldigingen en sociale lasten": { + "Geraamd bedrag der belastingschulden": { + "Buitenlandse belastingen en taksen": { + "account_number": "4508" + }, + "account_number": "450" + }, + "Te betalen btw": { + "account_number": "451", + "account_type": "Tax" + }, + "Te betalen belastingen en taksen": { + "Buitenlandse belastingen en taksen": { + "account_number": "4528" + }, + "account_number": "452" + }, + "Ingehouden voorheffingen": { + "account_number": "453" + }, + "Rijksdienst voor Sociale Zekerheid": { + "account_number": "454" + }, + "Bezoldigingen": { + "account_number": "455" + }, + "Vakantiegeld": { + "account_number": "456" + }, + "Andere sociale schulden": { + "account_number": "459" + }, + "account_number": "45" + }, + "Vooruitbetalingen op bestellingen": { + "account_number": "46" + }, + "Schulden uit de bestemming van het resultaat": { + "Dividenden en tantièmes over vorige boekjaren": { + "account_number": "470" + }, + "Dividenden over het boekjaar": { + "account_number": "471" + }, + "Tantièmes over het boekjaar": { + "account_number": "472" + }, + "Andere rechthebbenden": { + "account_number": "473" + }, + "account_number": "47" + }, + "Diverse schulden": { + "Vervallen obligaties en coupons": { + "account_number": "480" + }, + "Borgtochten ontvangen in contanten": { + "account_number": "488" + }, + "Andere diverse schulden": { + "account_number": "489" + }, + "account_number": "48" + }, + "Overlopende rekeningen": { + "Over te dragen kosten": { + "account_number": "490" + }, + "Verkregen opbrengsten": { + "account_number": "491" + }, + "Toe te rekenen kosten": { + "account_number": "492" + }, + "Over te dragen opbrengsten": { + "account_number": "493" + }, + "Wachtrekeningen": { + "account_number": "499" + }, + "account_number": "49" + } + }, + "KLASSE 5 : GELDBELEGGINGEN EN LIQUIDE MIDDELEN": { + "root_type": "Asset", + "Eigen aandelen": { + "account_number": "50" + }, + "Aandelen en geldbeleggingen andere dan vastrentende beleggingen": { + "Aanschaffingswaarde": { + "Aandelen": { + "account_number": "5100" + }, + "Geldbeleggingen andere dan vastrentende beleggingen": { + "account_number": "5101" + }, + "account_number": "510" + }, + "Niet-opgevraagde bedragen (-)": { + "Aandelen": { + "account_number": "5110" + }, + "account_number": "511" + }, + "Geboekte waardeverminderingen (-)": { + "Aandelen": { + "account_number": "5190" + }, + "Geldbeleggingen andere dan vastrentende beleggingen": { + "account_number": "5191" + }, + "account_number": "519" + }, + "account_number": "51" + }, + "Vastrentende effecten": { + "Aanschaffingswaarde": { + "account_number": "520" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "529" + }, + "account_number": "52" + }, + "Termijndeposito's": { + "Op meer dan één jaar": { + "account_number": "530" + }, + "Op meer dan één maand en op ten hoogste één jaar": { + "account_number": "531" + }, + "Op ten hoogste één maand": { + "account_number": "532" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "539" + }, + "account_number": "53" + }, + "Te incasseren vervallen waarden": { + "account_number": "54" + }, + "Kredietinstellingen": { + "Bank": { + "account_number": "5500", + "account_type": "Bank" + }, + "account_number": "55", + "account_type": "Bank" + }, + "Kassen": { + "Kassen-zegels": { + "account_number": "578", + "account_type": "Cash" + }, + "account_number": "57", + "account_type": "Cash" + }, + "Interne overboekingen": { + "account_number": "58", + "account_type": "Temporary" + } + }, + "KLASSE 6 : KOSTEN": { + "root_type": "Expense", + "Handelsgoederen, grond- en hulpstoffen": { + "Aankopen van grondstoffen": { + "account_number": "600", + "account_type": "Expense Account" + }, + "Aankopen van hulpstoffen": { + "account_number": "601", + "account_type": "Expense Account" + }, + "Aankopen van diensten, werk en studies": { + "account_number": "602", + "account_type": "Expense Account" + }, + "Algemene onderaannemingen": { + "account_number": "603", + "account_type": "Expense Account" + }, + "Aankopen van handelsgoederen": { + "account_number": "604", + "account_type": "Cost of Goods Sold" + }, + "Aankopen van onroerende goederen bestemd voor verkoop": { + "account_number": "605", + "account_type": "Expense Account" + }, + "Ontvangen kortingen, ristorno's en rabatten (-)": { + "account_number": "608", + "account_type": "Expense Account" + }, + "Voorraadwijzigingen": { + "van grondstoffen": { + "account_number": "6090", + "account_type": "Stock Adjustment" + }, + "van hulpstoffen": { + "account_number": "6091", + "account_type": "Stock Adjustment" + }, + "van handelsgoederen": { + "account_number": "6094", + "account_type": "Stock Adjustment" + }, + "van gekochte onroerende goederen bestemd voor verkoop": { + "account_number": "6095", + "account_type": "Stock Adjustment" + }, + "account_number": "609", + "account_type": "Stock Adjustment" + }, + "account_number": "60", + "account_type": "Expense Account" + }, + "Diensten en diverse goederen": { + "Uitzendkrachten en personen ter beschikking gesteld van de onderneming": { + "account_number": "617", + "account_type": "Expense Account" + }, + "Bezoldigingen en pensioenen van bestuurders, zaakvoerders en werkende vennoten, buiten arbeidsovereenkomst": { + "account_number": "618", + "account_type": "Expense Account" + }, + "Aankoopkosten begrepen in de waarde van de voorraden": { + "account_type": "Expenses Included In Valuation" + }, + "account_number": "61", + "account_type": "Expense Account" + }, + "Bezoldigingen, sociale lasten en pensioenen": { + "Bezoldigingen en rechtstreekse sociale voordelen": { + "Bestuurders of zaakvoerders": { + "account_number": "6200", + "account_type": "Expense Account" + }, + "Directiepersoneel": { + "account_number": "6201", + "account_type": "Expense Account" + }, + "Bedienden": { + "account_number": "6202", + "account_type": "Expense Account" + }, + "Arbeiders": { + "account_number": "6203", + "account_type": "Expense Account" + }, + "Andere personeelsleden": { + "account_number": "6204", + "account_type": "Expense Account" + }, + "account_number": "620", + "account_type": "Expense Account" + }, + "Werkgeversbijdragen voor sociale verzekeringen": { + "account_number": "621", + "account_type": "Expense Account" + }, + "Werkgeverspremies voor bovenwettelijke verzekeringen": { + "account_number": "622", + "account_type": "Expense Account" + }, + "Andere personeelskosten": { + "account_number": "623", + "account_type": "Expense Account" + }, + "Ouderdoms- en overlevingspensioenen": { + "Bestuurders of zaakvoerders": { + "account_number": "6240", + "account_type": "Expense Account" + }, + "Personeel": { + "account_number": "6241", + "account_type": "Expense Account" + }, + "account_number": "624", + "account_type": "Expense Account" + }, + "account_number": "62", + "account_type": "Expense Account" + }, + "Afschrijvingen, waardeverminderingen en voorzieningen voor risico's": { + "Afschrijvingen en waardeverminderingen op vaste activa-toevoeging": { + "Afschrijvingen op oprichtingskosten": { + "account_number": "6300", + "account_type": "Depreciation" + }, + "Afschrijvingen op immateriële vaste activa": { + "account_number": "6301", + "account_type": "Depreciation" + }, + "Afschrijvingen op materiële vaste activa": { + "account_number": "6302", + "account_type": "Depreciation" + }, + "Waardeverminderingen op immateriële vaste activa": { + "account_number": "6308", + "account_type": "Depreciation" + }, + "Waardeverminderingen op materiële vaste activa": { + "account_number": "6309", + "account_type": "Depreciation" + }, + "account_number": "630", + "account_type": "Depreciation" + }, + "Waardeverminderingen op voorraden": { + "Toevoeging": { + "account_number": "6310", + "account_type": "Depreciation" + }, + "Terugneming (-)": { + "account_number": "6311", + "account_type": "Depreciation" + }, + "account_number": "631", + "account_type": "Depreciation" + }, + "Waardeverminderingen op bestellingen in uitvoering": { + "Toevoeging": { + "account_number": "6320", + "account_type": "Depreciation" + }, + "Terugneming (-)": { + "account_number": "6321", + "account_type": "Depreciation" + }, + "account_number": "632", + "account_type": "Depreciation" + }, + "Waardeverminderingen op handelsvorderingen op meer dan één jaar": { + "Toevoeging": { + "account_number": "6330", + "account_type": "Depreciation" + }, + "Terugneming (-)": { + "account_number": "6331", + "account_type": "Depreciation" + }, + "account_number": "633", + "account_type": "Depreciation" + }, + "Waardeverminderingen op handelsvorderingen op ten hoogste één jaar": { + "Toevoeging": { + "account_number": "6340", + "account_type": "Depreciation" + }, + "Terugneming (-)": { + "account_number": "6341", + "account_type": "Depreciation" + }, + "account_number": "634", + "account_type": "Depreciation" + }, + "Voorzieningen voor pensioenen en soortgelijke verplichtingen": { + "Toevoeging": { + "account_number": "6350", + "account_type": "Depreciation" + }, + "Besteding en terugneming (-)": { + "account_number": "6351", + "account_type": "Depreciation" + }, + "account_number": "635", + "account_type": "Depreciation" + }, + "Voorzieningen voor grote herstellingswerken en grote onderhoudswerken": { + "Toevoeging": { + "account_number": "6360", + "account_type": "Depreciation" + }, + "Besteding en terugneming (-)": { + "account_number": "6361", + "account_type": "Depreciation" + }, + "account_number": "636", + "account_type": "Depreciation" + }, + "Voorzieningen voor milieuverplichtingen": { + "Toevoeging": { + "account_number": "6370", + "account_type": "Depreciation" + }, + "Besteding en terugneming (-)": { + "account_number": "6371", + "account_type": "Depreciation" + }, + "account_number": "637", + "account_type": "Depreciation" + }, + "Voorzieningen voor andere risico's en kosten": { + "Toevoeging": { + "account_number": "6380", + "account_type": "Expense Account" + }, + "Besteding en terugneming (-)": { + "account_number": "6381", + "account_type": "Expense Account" + }, + "account_number": "638", + "account_type": "Expense Account" + }, + "account_number": "63", + "account_type": "Expense Account" + }, + "Andere bedrijfskosten": { + "Bedrijfsbelastingen": { + "account_number": "640", + "account_type": "Expense Account" + }, + "Minderwaarden op de courante realisatie van vaste activa": { + "account_number": "641", + "account_type": "Expense Account" + }, + "Minderwaarden op de realisatie van handelsvorderingen": { + "account_number": "642", + "account_type": "Expense Account" + }, + "Diverse bedrijfskosten (643 tot 648)": { + "account_number": "643", + "account_type": "Expense Account" + }, + "Als herstructureringskosten geactiveerde bedrijfskosten (-)": { + "account_number": "649", + "account_type": "Expense Account" + }, + "account_number": "64", + "account_type": "Expense Account" + }, + "Financiële kosten": { + "Kosten van schulden": { + "Rente, commissies en kosten verbonden aan schulden": { + "account_number": "6500", + "account_type": "Expense Account" + }, + "Afschrijving van kosten bij uitgifte van leningen": { + "account_number": "6501", + "account_type": "Expense Account" + }, + "Geactiveerde intercalaire interesten (-)": { + "account_number": "6502", + "account_type": "Expense Account" + }, + "account_number": "650", + "account_type": "Expense Account" + }, + "Waardeverminderingen op vlottende activa": { + "Toevoeging": { + "account_number": "6510", + "account_type": "Expense Account" + }, + "Terugneming (-)": { + "account_number": "6511", + "account_type": "Expense Account" + }, + "account_number": "651", + "account_type": "Expense Account" + }, + "Minderwaarden op de realisatie van vlottende activa": { + "account_number": "652", + "account_type": "Expense Account" + }, + "Discontokosten op vorderingen": { + "account_number": "653", + "account_type": "Expense Account" + }, + "Wisselresultaten": { + "account_number": "654", + "account_type": "Expense Account" + }, + "Resultaten uit de omrekening van vreemde valuta": { + "account_number": "655", + "account_type": "Expense Account" + }, + "Voorzieningen met financieel karakter": { + "Toevoegingen": { + "account_number": "6560", + "account_type": "Expense Account" + }, + "Bestedingen en terugnemingen (-)": { + "account_number": "6561", + "account_type": "Expense Account" + }, + "account_number": "656", + "account_type": "Expense Account" + }, + "Diverse financiële kosten (657 tot 658)": { + "account_number": "657", + "account_type": "Expense Account" + }, + "Als herstructureringskosten geactiveerde financiële kosten (-)": { + "account_number": "659", + "account_type": "Expense Account" + }, + "account_number": "65", + "account_type": "Expense Account" + }, + "Niet-recurrente bedrijfs- of financiële kosten": { + "Niet-recurrente afschrijvingen en waardeverminderingen (toevoeging)": { + "op oprichtingskosten": { + "account_number": "6600", + "account_type": "Expense Account" + }, + "op immateriële vaste activa": { + "account_number": "6601", + "account_type": "Expense Account" + }, + "op materiële vaste activa": { + "account_number": "6602", + "account_type": "Expense Account" + }, + "account_number": "660", + "account_type": "Expense Account" + }, + "Waardeverminderingen op financiële vaste activa (toevoeging)": { + "account_number": "661", + "account_type": "Expense Account" + }, + "Voorzieningen voor niet-recurrente risico's en kosten": { + "Voorzieningen voor niet-recurrente bedrijfsrisico's en -kosten": { + "Toevoeging": { + "account_number": "66200", + "account_type": "Expense Account" + }, + "Besteding (-)": { + "account_number": "66201", + "account_type": "Expense Account" + }, + "account_number": "6620", + "account_type": "Expense Account" + }, + "Voorzieningen voor niet-recurrente financiële risico's en -kosten": { + "Toevoeging": { + "account_number": "66210", + "account_type": "Expense Account" + }, + "Besteding (-)": { + "account_number": "66211", + "account_type": "Expense Account" + }, + "account_number": "6621", + "account_type": "Expense Account" + }, + "account_number": "662", + "account_type": "Expense Account" + }, + "Minderwaarden op de realisatie van vaste activa": { + "Minderwaarden op de realisatie van immateriële en materiële vaste activa": { + "account_number": "6630", + "account_type": "Expense Account" + }, + "Minderwaarden op de realisatie van financiële vaste activa": { + "account_number": "6631", + "account_type": "Expense Account" + }, + "account_number": "663", + "account_type": "Expense Account" + }, + "Andere niet-recurrente bedrijfskosten (664 tot 667)": { + "account_number": "664", + "account_type": "Expense Account" + }, + "Andere niet-recurrente financiële kosten": { + "account_number": "668", + "account_type": "Expense Account" + }, + "Als herstructureringskosten geactiveerde niet-recurrente bedrijfskosten (-)": { + "account_number": "6690", + "account_type": "Expense Account" + }, + "Als herstructureringskosten geactiveerde niet-recurrente financiële kosten (-)": { + "account_number": "6691", + "account_type": "Expense Account" + }, + "account_number": "66", + "account_type": "Expense Account" + }, + "Belastingen op het resultaat": { + "Belgische belastingen op het resultaat van het boekjaar": { + "Verschuldigde of gestorte belastingen en voorheffingen": { + "account_number": "6700", + "account_type": "Expense Account" + }, + "Geactiveerde overschotten van betaalde belastingen en voorheffingen (-)": { + "account_number": "6701", + "account_type": "Expense Account" + }, + "Geraamde belastingen": { + "account_number": "6702", + "account_type": "Expense Account" + }, + "account_number": "670", + "account_type": "Expense Account" + }, + "Belgische belastingen op het resultaat van vorige boekjaren": { + "Verschuldigde of gestorte belastingsupplementen": { + "account_number": "6710", + "account_type": "Expense Account" + }, + "Geraamde belastingsupplementen": { + "account_number": "6711", + "account_type": "Expense Account" + }, + "Gevormde fiscale voorzieningen": { + "account_number": "6712", + "account_type": "Expense Account" + }, + "account_number": "671", + "account_type": "Expense Account" + }, + "Buitenlandse belastingen op het resultaat van het boekjaar": { + "account_number": "672", + "account_type": "Expense Account" + }, + "Buitenlandse belastingen op het resultaat van vorige boekjaren": { + "account_number": "673", + "account_type": "Expense Account" + }, + "account_number": "67", + "account_type": "Expense Account" + }, + "Overboeking naar de uitgestelde belastingen en naar de belastingvrije reserves": { + "Overboeking naar de uitgestelde belastingen": { + "account_number": "680", + "account_type": "Expense Account" + }, + "Overboeking naar de belastingvrije reserves": { + "account_number": "689", + "account_type": "Expense Account" + }, + "account_number": "68", + "account_type": "Expense Account" + }, + "Resultatenverwerking": { + "Overgedragen verlies van het vorige boekjaar": { + "account_number": "690", + "account_type": "Expense Account" + }, + "Toevoeging aan de inbreng": { + "account_number": "691", + "account_type": "Expense Account" + }, + "Toevoeging aan de reserves": { + "Toevoeging aan de wettelijke reserve": { + "account_number": "6920", + "account_type": "Expense Account" + }, + "Toevoeging aan de overige reserves": { + "account_number": "6921", + "account_type": "Expense Account" + }, + "account_number": "692", + "account_type": "Expense Account" + }, + "Over te dragen winst": { + "account_number": "693", + "account_type": "Expense Account" + }, + "Vergoeding van de inbreng": { + "account_number": "694", + "account_type": "Expense Account" + }, + "Bestuurders of zaakvoerders": { + "account_number": "695", + "account_type": "Expense Account" + }, + "Werknemers": { + "account_number": "696", + "account_type": "Expense Account" + }, + "Andere rechthebbenden": { + "account_number": "697", + "account_type": "Expense Account" + }, + "account_number": "69", + "account_type": "Expense Account" + } + }, + "KLASSE 7 : OPBRENGSTEN": { + "root_type": "Income", + "Omzet": { + "Toegekende kortingen, ristorno's en rabatten (-)": { + "account_number": "708", + "account_type": "Income Account" + }, + "account_number": "70", + "account_type": "Income Account" + }, + "Wijzigingen in de voorraden en in de bestellingen in uitvoering": { + "In de voorraad goederen in bewerking": { + "account_number": "712", + "account_type": "Income Account" + }, + "In de voorraad gereed product": { + "account_number": "713", + "account_type": "Income Account" + }, + "In de voorraad onroerende goederen bestemd voor verkoop": { + "account_number": "715", + "account_type": "Income Account" + }, + "In de bestellingen in uitvoering": { + "Aanschaffingswaarde": { + "account_number": "7170", + "account_type": "Income Account" + }, + "Toegerekende winst": { + "account_number": "7171", + "account_type": "Income Account" + }, + "account_number": "717", + "account_type": "Income Account" + }, + "account_number": "71", + "account_type": "Income Account" + }, + "Geproduceerde vaste activa": { + "account_number": "72", + "account_type": "Income Account" + }, + "Andere bedrijfsopbrengsten": { + "Bedrijfssubsidies en compenserende bedragen": { + "account_number": "740", + "account_type": "Income Account" + }, + "Meerwaarden op de courante realisatie van materiële vaste activa": { + "account_number": "741", + "account_type": "Income Account" + }, + "Meerwaarden op de realisatie van handelsvorderingen": { + "account_number": "742", + "account_type": "Income Account" + }, + "Diverse bedrijfsopbrengsten (743 tot 749)": { + "account_number": "743", + "account_type": "Income Account" + }, + "account_number": "74", + "account_type": "Income Account" + }, + "Financiële opbrengsten": { + "Opbrengsten uit financiële vaste activa": { + "account_number": "750", + "account_type": "Income Account" + }, + "Opbrengsten uit vlottende activa": { + "account_number": "751", + "account_type": "Income Account" + }, + "Meerwaarden op de realisatie van vlottende activa": { + "account_number": "752", + "account_type": "Income Account" + }, + "Kapitaal- en interestsubsidies": { + "account_number": "753", + "account_type": "Income Account" + }, + "Wisselresultaten": { + "account_number": "754", + "account_type": "Income Account" + }, + "Resultaten uit de omrekening van vreemde valuta": { + "account_number": "755", + "account_type": "Income Account" + }, + "Diverse financiële opbrengsten (756 tot 759)": { + "account_number": "756", + "account_type": "Income Account" + }, + "account_number": "75", + "account_type": "Income Account" + }, + "Niet-recurrente bedrijfs- of financiële opbrengsten": { + "Terugneming van afschrijvingen en waardeverminderingen": { + "op immateriële vaste activa": { + "account_number": "7600", + "account_type": "Income Account" + }, + "op materiële vaste activa": { + "account_number": "7601", + "account_type": "Income Account" + }, + "account_number": "760", + "account_type": "Income Account" + }, + "Terugneming van waardeverminderingen op financiële vaste activa": { + "account_number": "761", + "account_type": "Income Account" + }, + "Terugneming van voorzieningen voor niet-recurrente risico's en kosten": { + "Terugneming van voorzieningen voor niet-recurrente bedrijfsrisico's en -kosten": { + "account_number": "7620", + "account_type": "Income Account" + }, + "Terugneming van voorzieningen voor niet-recurrente financiële risico's en -kosten": { + "account_number": "7621", + "account_type": "Income Account" + }, + "account_number": "762", + "account_type": "Income Account" + }, + "Meerwaarden op de realisatie van vaste activa": { + "Meerwaarde op de realisatie van immateriële en materiële vaste activa": { + "account_number": "7630", + "account_type": "Income Account" + }, + "Meerwaarde op de realisatie van financiële vaste activa": { + "account_number": "7631", + "account_type": "Income Account" + }, + "account_number": "763", + "account_type": "Income Account" + }, + "Andere niet-recurrente bedrijfsopbrengsten (764 tot 768)": { + "account_number": "764", + "account_type": "Income Account" + }, + "Andere niet-recurrente financiële opbrengsten": { + "account_number": "769", + "account_type": "Income Account" + }, + "account_number": "76", + "account_type": "Income Account" + }, + "Regularisering van belastingen en terugneming van fiscale voorzieningen": { + "Belgische belastingen op het resultaat": { + "Regularisering van verschuldigde of betaalde belastingen": { + "account_number": "7710", + "account_type": "Income Account" + }, + "Regularisering van geraamde belastingen": { + "account_number": "7711", + "account_type": "Income Account" + }, + "Terugneming van fiscale voorzieningen": { + "account_number": "7712", + "account_type": "Income Account" + }, + "account_number": "771", + "account_type": "Income Account" + }, + "Buitenlandse belastingen op het resultaat": { + "account_number": "773", + "account_type": "Income Account" + }, + "account_number": "77", + "account_type": "Income Account" + }, + "Onttrekkingen aan de belastingvrije reserves en uitgestelde belastingen": { + "Onttrekkingen aan de uitgestelde belastingen": { + "account_number": "780", + "account_type": "Income Account" + }, + "Onttrekkingen aan de belastingvrije reserves": { + "account_number": "789", + "account_type": "Income Account" + }, + "account_number": "78", + "account_type": "Income Account" + }, + "Resultaatverwerking": { + "Overgedragen winst van het vorige boekjaar": { + "account_number": "790", + "account_type": "Income Account" + }, + "Onttrekking aan de inbreng": { + "account_number": "791", + "account_type": "Income Account" + }, + "Onttrekking aan de reserves": { + "account_number": "792", + "account_type": "Income Account" + }, + "Over te dragen verlies": { + "account_number": "793", + "account_type": "Income Account" + }, + "Tussenkomst van vennoten (of van de eigenaar) in het verlies": { + "account_number": "794", + "account_type": "Income Account" + }, + "account_number": "79", + "account_type": "Income Account" + } + } + } +} \ No newline at end of file diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_minimum_genormaliseerd_rekeningstelsel_verenigingen_stichtingen.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_minimum_genormaliseerd_rekeningstelsel_verenigingen_stichtingen.json new file mode 100644 index 00000000000..d94c3552e40 --- /dev/null +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_minimum_genormaliseerd_rekeningstelsel_verenigingen_stichtingen.json @@ -0,0 +1,1478 @@ +{ + "country_code": "be", + "name": "België - Minimum genormaliseerd algemeen rekeningstelsel voor verenigingen en stichtingen", + "tree": { + "KLASSE 1 : VERENIGINGSFONDS EN STICHTINGSFONDS": { + "root_type": "Equity", + "Fondsen van de vereniging of stichting": { + "account_number": "10", + "account_type": "Equity" + }, + "Herwaarderingsmeerwaarden": { + "Herwaarderingsmeerwaarden op immateriële vaste activa": { + "account_number": "120", + "account_type": "Equity" + }, + "Herwaarderingsmeerwaarden op materiële vaste activa": { + "account_number": "121", + "account_type": "Equity" + }, + "Herwaarderingsmeerwaarden op financiële vaste activa": { + "account_number": "122", + "account_type": "Equity" + }, + "Terugneming van waardeverminderingen op geldbeleggingen": { + "account_number": "124", + "account_type": "Equity" + }, + "account_number": "12", + "account_type": "Equity" + }, + "Bestemde fondsen en andere reserves": { + "Fondsen bestemd voor investeringen": { + "account_number": "130", + "account_type": "Equity" + }, + "Fondsen bestemd voor sociaal passief": { + "account_number": "131", + "account_type": "Equity" + }, + "Belastingvrije reserves": { + "account_number": "132", + "account_type": "Equity" + }, + "Andere bestemde fondsen en andere reserves": { + "account_number": "139", + "account_type": "Equity" + }, + "account_number": "13", + "account_type": "Equity" + }, + "Overgedragen resultaat (+)(-)": { + "account_number": "14", + "account_type": "Equity" + }, + "Kapitaalsubsidies": { + "account_number": "15", + "account_type": "Equity" + } + }, + "KLASSE 1 : VOORZIENINGEN, UITGESTELDE BELASTINGEN EN SCHULDEN OP MEER DAN ÉÉN JAAR": { + "root_type": "Liability", + "Voorzieningen en uitgestelde belastingen": { + "Voorzieningen voor pensioenen en soortgelijke verplichtingen": { + "account_number": "160", + "account_type": "Liability" + }, + "Voorzieningen voor belastingen": { + "account_number": "161", + "account_type": "Liability" + }, + "Voorzieningen voor grote herstellingswerken en grote onderhoudswerken": { + "account_number": "162", + "account_type": "Liability" + }, + "Voorzieningen voor milieuverplichtingen": { + "account_number": "163", + "account_type": "Liability" + }, + "Voorzieningen voor terug te betalen subsidies, legaten en schenkingen met terugnemingsrecht": { + "account_number": "167", + "account_type": "Liability" + }, + "Uitgestelde belastingen": { + "account_number": "168", + "account_type": "Liability" + }, + "account_number": "16", + "account_type": "Liability" + }, + "Schulden op meer dan één jaar": { + "Achtergestelde leningen": { + "account_number": "170", + "account_type": "Liability" + }, + "Niet-achtergestelde obligatieleningen": { + "account_number": "171", + "account_type": "Liability" + }, + "Leasingschulden en soortgelijke schulden": { + "account_number": "172", + "account_type": "Liability" + }, + "Kredietinstellingen": { + "Schulden op rekening": { + "account_number": "1730", + "account_type": "Liability" + }, + "Promessen": { + "account_number": "1731", + "account_type": "Liability" + }, + "Acceptkredieten": { + "account_number": "1732", + "account_type": "Liability" + }, + "account_number": "173", + "account_type": "Liability" + }, + "Overige leningen": { + "account_number": "174", + "account_type": "Liability" + }, + "Handelsschulden": { + "Leveranciers": { + "account_number": "1750", + "account_type": "Liability" + }, + "Te betalen wissels": { + "account_number": "1751", + "account_type": "Liability" + }, + "account_number": "175", + "account_type": "Liability" + }, + "Vooruitbetalingen op bestellingen": { + "account_number": "176", + "account_type": "Liability" + }, + "Borgtochten in contanten": { + "account_number": "178", + "account_type": "Liability" + }, + "Overige schulden": { + "Rentedragend": { + "account_number": "1790", + "account_type": "Liability" + }, + "Niet-rentedragend of gekoppeld aan een abnormaal lage rente": { + "account_number": "1791", + "account_type": "Liability" + }, + "account_number": "179", + "account_type": "Liability" + }, + "account_number": "17", + "account_type": "Liability" + } + }, + "KLASSE 2 : OPRICHTINGSKOSTEN, VASTE ACTIVA EN VORDERINGEN OP MEER DAN ÉÉN JAAR": { + "root_type": "Asset", + "Oprichtingskosten": { + "Kosten van oprichting": { + "account_number": "200", + "account_type": "Fixed Asset" + }, + "Kosten bij uitgifte van leningen": { + "account_number": "201", + "account_type": "Fixed Asset" + }, + "Overige oprichtingskosten": { + "account_number": "202", + "account_type": "Fixed Asset" + }, + "Herstructureringskosten": { + "account_number": "204", + "account_type": "Fixed Asset" + }, + "account_number": "20", + "account_type": "Fixed Asset" + }, + "Immateriële vaste activa": { + "Kosten van onderzoek en ontwikkeling": { + "account_number": "210", + "account_type": "Fixed Asset" + }, + "Concessies, octrooien, licenties, knowhow, merken en soortgelijke rechten": { + "account_number": "211", + "account_type": "Fixed Asset" + }, + "Goodwill": { + "account_number": "212", + "account_type": "Fixed Asset" + }, + "Vooruitbetalingen": { + "account_number": "213", + "account_type": "Fixed Asset" + }, + "Geboekte afschrijvingen en waardeverminderingen (-)": { + "account_number": "219", + "account_type": "Accumulated Depreciation" + }, + "account_number": "21", + "account_type": "Fixed Asset" + }, + "Terreinen en gebouwen": { + "Terreinen": { + "account_number": "220", + "account_type": "Fixed Asset" + }, + "Gebouwen": { + "account_number": "221", + "account_type": "Fixed Asset" + }, + "Bebouwde terreinen": { + "account_number": "222", + "account_type": "Fixed Asset" + }, + "Overige zakelijke rechten op onroerende goederen": { + "account_number": "223", + "account_type": "Fixed Asset" + }, + "Geboekte afschrijvingen en waardeverminderingen (-)": { + "account_number": "229", + "account_type": "Accumulated Depreciation" + }, + "account_number": "22", + "account_type": "Fixed Asset" + }, + "Installaties, machines en uitrusting": { + "account_number": "23", + "account_type": "Fixed Asset" + }, + "Meubilair en rollend materieel": { + "account_number": "24", + "account_type": "Fixed Asset" + }, + "Vaste activa in leasing of op grond van soortgelijke rechten": { + "Terreinen en gebouwen": { + "account_number": "250", + "account_type": "Fixed Asset" + }, + "Installaties, machines en uitrusting": { + "account_number": "251", + "account_type": "Fixed Asset" + }, + "Meubilair en rollend materieel": { + "account_number": "252", + "account_type": "Fixed Asset" + }, + "Geboekte afschrijvingen en waardeverminderingen (-)": { + "account_number": "259", + "account_type": "Accumulated Depreciation" + }, + "account_number": "25", + "account_type": "Fixed Asset" + }, + "Overige materiële vaste activa": { + "account_number": "26", + "account_type": "Fixed Asset" + }, + "Materiële activa in aanbouw en vooruitbetalingen": { + "account_number": "27", + "account_type": "Fixed Asset" + }, + "Financiële vaste activa": { + "Deelnemingen in verbonden vennootschappen": { + "Aanschaffingswaarde": { + "account_number": "2800", + "account_type": "Fixed Asset" + }, + "Nog te storten bedragen (-)": { + "account_number": "2801", + "account_type": "Fixed Asset" + }, + "Geboekte meerwaarden": { + "account_number": "2808", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2809", + "account_type": "Fixed Asset" + }, + "account_number": "280", + "account_type": "Fixed Asset" + }, + "Vorderingen op verbonden entiteiten": { + "Vorderingen op rekening": { + "account_number": "2810", + "account_type": "Fixed Asset" + }, + "Te innen wissels": { + "account_number": "2811", + "account_type": "Fixed Asset" + }, + "Vastrentende effecten": { + "account_number": "2812", + "account_type": "Fixed Asset" + }, + "Dubieuze debiteuren": { + "account_number": "2817", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2819", + "account_type": "Fixed Asset" + }, + "account_number": "281", + "account_type": "Fixed Asset" + }, + "Deelnemingen in vennootschappen waarmee een deelnemingsverhouding bestaat": { + "Aanschaffingswaarde": { + "account_number": "2820", + "account_type": "Fixed Asset" + }, + "Nog te storten bedragen (-)": { + "account_number": "2821", + "account_type": "Fixed Asset" + }, + "Geboekte meerwaarden": { + "account_number": "2828", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2829", + "account_type": "Fixed Asset" + }, + "account_number": "282", + "account_type": "Fixed Asset" + }, + "Vorderingen op vennootschappen waarmee een deelnemingsverhouding bestaat": { + "Vorderingen op rekening": { + "account_number": "2830", + "account_type": "Fixed Asset" + }, + "Te innen wissels": { + "account_number": "2831", + "account_type": "Fixed Asset" + }, + "Vastrentende effecten": { + "account_number": "2832", + "account_type": "Fixed Asset" + }, + "Dubieuze debiteuren": { + "account_number": "2837", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2839", + "account_type": "Fixed Asset" + }, + "account_number": "283", + "account_type": "Fixed Asset" + }, + "Andere aandelen": { + "Aanschaffingswaarde": { + "account_number": "2840", + "account_type": "Fixed Asset" + }, + "Nog te storten bedragen (-)": { + "account_number": "2841", + "account_type": "Fixed Asset" + }, + "Geboekte meerwaarden": { + "account_number": "2848", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2849", + "account_type": "Fixed Asset" + }, + "account_number": "284", + "account_type": "Fixed Asset" + }, + "Overige vorderingen": { + "Vorderingen op rekening": { + "account_number": "2850", + "account_type": "Fixed Asset" + }, + "Te innen wissels": { + "account_number": "2851", + "account_type": "Fixed Asset" + }, + "Vastrentende effecten": { + "account_number": "2852", + "account_type": "Fixed Asset" + }, + "Dubieuze debiteuren": { + "account_number": "2857", + "account_type": "Fixed Asset" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2859", + "account_type": "Fixed Asset" + }, + "account_number": "285", + "account_type": "Fixed Asset" + }, + "Borgtochten betaald in contanten": { + "account_number": "288", + "account_type": "Fixed Asset" + }, + "account_number": "28", + "account_type": "Fixed Asset" + }, + "Vorderingen op meer dan 1 jaar": { + "Handelsvorderingen": { + "Handelsdebiteuren": { + "account_number": "2900" + }, + "Te innen wissels": { + "account_number": "2901" + }, + "Vooruitbetalingen": { + "account_number": "2906" + }, + "Dubieuze debiteuren": { + "account_number": "2907" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2909" + }, + "account_number": "290" + }, + "Overige vorderingen": { + "Vorderingen op rekening": { + "account_number": "2910" + }, + "Te innen wissels": { + "account_number": "2911" + }, + "Te ontvangen subsidies": { + "account_number": "2912" + }, + "Niet-rentedragende vorderingen of gekoppeld aan een abnormaal lage rente": { + "account_number": "2915" + }, + "Dubieuze debiteuren": { + "account_number": "2916" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "2919" + }, + "account_number": "291" + }, + "account_number": "29" + } + }, + "KLASSE 3 : VOORRADEN EN BESTELLINGEN IN UITVOERING": { + "root_type": "Asset", + "Grondstoffen": { + "Aanschaffingswaarde": { + "account_number": "300" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "309" + }, + "account_number": "30" + }, + "Hulpstoffen": { + "Aanschaffingswaarde": { + "account_number": "310" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "319" + }, + "account_number": "31" + }, + "Goederen in bewerking": { + "Aanschaffingswaarde": { + "account_number": "320" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "329" + }, + "account_number": "32" + }, + "Gereed product": { + "Aanschaffingswaarde": { + "account_number": "330" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "339" + }, + "account_number": "33" + }, + "Handelsgoederen": { + "Aanschaffingswaarde": { + "account_number": "340", + "account_type": "Stock" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "349" + }, + "account_number": "34", + "account_type": "Stock" + }, + "Onroerende goederen bestemd voor verkoop": { + "Aanschaffingswaarde": { + "account_number": "350" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "359" + }, + "account_number": "35" + }, + "Vooruitbetalingen op voorraadinkopen": { + "Vooruitbetalingen": { + "account_number": "360" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "369" + }, + "account_number": "36" + }, + "Bestellingen in uitvoering": { + "Aanschaffingswaarde": { + "account_number": "370" + }, + "Toegerekende winst": { + "account_number": "371" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "379" + }, + "account_number": "37" + }, + "Geleverde voorraad, niet gefactureerd": { + "account_type": "Stock Delivered But Not Billed" + } + }, + "KLASSE 4 : VORDERINGEN OP TEN HOOGSTE ÉÉN JAAR": { + "root_type": "Asset", + "Handelsvorderingen": { + "Handelsdebiteuren": { + "account_number": "400", + "account_type": "Receivable" + }, + "Te innen wissels": { + "account_number": "401", + "account_type": "Receivable" + }, + "Te innen opbrengsten": { + "account_number": "404", + "account_type": "Receivable" + }, + "Vooruitbetalingen": { + "account_number": "406" + }, + "Dubieuze debiteuren": { + "account_number": "407", + "account_type": "Receivable" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "409" + }, + "account_number": "40", + "account_type": "Receivable" + }, + "Overige vorderingen": { + "Terug te vorderen btw": { + "account_number": "411", + "account_type": "Tax" + }, + "Terug te vorderen belastingen en voorheffingen": { + "Andere Belgische belastingen": { + "account_number": "4125" + }, + "Buitenlandse belastingen": { + "account_number": "4128" + }, + "account_number": "412" + }, + "Te ontvangen subsidies": { + "account_number": "413" + }, + "Te innen opbrengsten": { + "account_number": "414" + }, + "Niet-rentedragende vorderingen of gekoppeld aan een abnormaal lage rente": { + "account_number": "415" + }, + "Diverse vorderingen": { + "account_number": "416" + }, + "Dubieuze debiteuren": { + "account_number": "417" + }, + "Borgtochten betaald in contanten": { + "account_number": "418" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "419" + }, + "account_number": "41" + } + }, + "KLASSE 4 : SCHULDEN OP TEN HOOGSTE ÉÉN JAAR": { + "root_type": "Liability", + "Schulden op meer dan één jaar die binnen het jaar vervallen": { + "account_number": "42" + }, + "Financiële schulden": { + "Kredietinstellingen - Leningen op rekening met vaste termijn": { + "account_number": "430" + }, + "Kredietinstellingen - Promessen": { + "account_number": "431" + }, + "Kredietinstellingen - Acceptkredieten": { + "account_number": "432" + }, + "Kredietinstellingen - Schulden op rekening-courant": { + "account_number": "433" + }, + "Overige leningen": { + "account_number": "439" + }, + "account_number": "43" + }, + "Handelsschulden": { + "Leveranciers": { + "account_number": "440", + "account_type": "Payable" + }, + "Te betalen wissels": { + "account_number": "441", + "account_type": "Payable" + }, + "Te ontvangen facturen": { + "account_number": "444", + "account_type": "Stock Received But Not Billed" + }, + "account_number": "44", + "account_type": "Payable" + }, + "Schulden met betrekking tot belastingen, bezoldigingen en sociale lasten": { + "Geraamd bedrag der belastingschulden": { + "Andere Belgische belastingen": { + "account_number": "4505" + }, + "Buitenlandse belastingen": { + "account_number": "4508" + }, + "account_number": "450" + }, + "Te betalen btw": { + "account_number": "451", + "account_type": "Tax" + }, + "Te betalen belastingen en taksen": { + "Andere Belgische belastingen": { + "account_number": "4525" + }, + "Buitenlandse belastingen": { + "account_number": "4528" + }, + "account_number": "452" + }, + "Ingehouden voorheffingen": { + "account_number": "453" + }, + "Rijksdienst voor Sociale Zekerheid": { + "account_number": "454" + }, + "Bezoldigingen": { + "account_number": "455" + }, + "Vakantiegeld": { + "account_number": "456" + }, + "Andere sociale schulden": { + "account_number": "459" + }, + "account_number": "45" + }, + "Overlopende rekeningen": { + "Over te dragen kosten": { + "account_number": "490" + }, + "Verkregen opbrengsten": { + "account_number": "491" + }, + "Toe te rekenen kosten": { + "account_number": "492" + }, + "Over te dragen opbrengsten": { + "account_number": "493" + }, + "Wachtrekeningen": { + "account_number": "499" + }, + "account_number": "49" + }, + "Vervallen obligaties en coupons": { + "account_number": "480" + }, + "Terug te betalen subsidies": { + "account_number": "483" + }, + "Borgtochten ontvangen in contanten": { + "account_number": "488" + }, + "Andere diverse schulden": { + "Rentedragend": { + "account_number": "4890" + }, + "Niet-rentedragend of gekoppeld aan een abnormaal lage rente": { + "account_number": "4891" + }, + "account_number": "489" + } + }, + "KLASSE 5 : GELDBELEGGINGEN EN LIQUIDE MIDDELEN": { + "root_type": "Asset", + "Geldbeleggingen andere dan aandelen, vastrentende effecten en termijndeposito's": { + "Aanschaffingswaarde": { + "account_number": "500" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "509" + }, + "account_number": "50" + }, + "Aandelen": { + "Aanschaffingswaarde": { + "account_number": "510" + }, + "Nog te storten bedragen (-)": { + "account_number": "511" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "519" + }, + "account_number": "51" + }, + "Vastrentende effecten": { + "Aanschaffingswaarde": { + "account_number": "520" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "529" + }, + "account_number": "52" + }, + "Termijndeposito's": { + "Op meer dan één jaar": { + "account_number": "530" + }, + "Op meer dan één maand en op ten hoogste één jaar": { + "account_number": "531" + }, + "Op ten hoogste één maand": { + "account_number": "532" + }, + "Geboekte waardeverminderingen (-)": { + "account_number": "539" + }, + "account_number": "53" + }, + "Te incasseren vervallen waarden": { + "account_number": "54" + }, + "Kredietinstellingen": { + "Bank": { + "account_number": "5500", + "account_type": "Bank" + }, + "account_number": "55", + "account_type": "Bank" + }, + "Kassen": { + "Kassen-contanten": { + "account_number": "570", + "account_type": "Cash" + }, + "Kassen-zegels": { + "account_number": "578", + "account_type": "Cash" + }, + "account_number": "57", + "account_type": "Cash" + }, + "Interne overboekingen": { + "account_number": "58", + "account_type": "Temporary" + } + }, + "KLASSE 6 : KOSTEN": { + "root_type": "Expense", + "Handelsgoederen, grond- en hulpstoffen": { + "Aankopen van grondstoffen": { + "account_number": "600", + "account_type": "Expense Account" + }, + "Aankopen van hulpstoffen": { + "account_number": "601", + "account_type": "Expense Account" + }, + "Aankopen van diensten, werk en studies": { + "account_number": "602", + "account_type": "Expense Account" + }, + "Algemene onderaannemingen": { + "account_number": "603", + "account_type": "Expense Account" + }, + "Aankopen van handelsgoederen": { + "account_number": "604", + "account_type": "Cost of Goods Sold" + }, + "Aankopen van onroerende goederen bestemd voor verkoop": { + "account_number": "605", + "account_type": "Expense Account" + }, + "Ontvangen kortingen, ristorno's en rabatten (-)": { + "account_number": "608", + "account_type": "Expense Account" + }, + "Voorraadwijzigingen": { + "van grondstoffen": { + "account_number": "6090", + "account_type": "Stock Adjustment" + }, + "van hulpstoffen": { + "account_number": "6091", + "account_type": "Stock Adjustment" + }, + "van handelsgoederen": { + "account_number": "6094", + "account_type": "Stock Adjustment" + }, + "van gekochte onroerende goederen bestemd voor verkoop": { + "account_number": "6095", + "account_type": "Stock Adjustment" + }, + "account_number": "609", + "account_type": "Stock Adjustment" + }, + "account_number": "60", + "account_type": "Expense Account" + }, + "Diensten en diverse goederen": { + "Uitzendpersoneel en personen die ter beschikking worden gesteld van de vereniging of stichting": { + "account_number": "617", + "account_type": "Expense Account" + }, + "Bezoldigingen en pensioenen van bestuurders, buiten arbeidsovereenkomst": { + "account_number": "618", + "account_type": "Expense Account" + }, + "Aankoopkosten begrepen in de waarde van de voorraden": { + "account_type": "Expenses Included In Valuation" + }, + "account_number": "61", + "account_type": "Expense Account" + }, + "Bezoldigingen, sociale lasten en pensioenen": { + "Bezoldigingen en rechtstreekse sociale voordelen": { + "Bestuurders of zaakvoerders": { + "account_number": "6200", + "account_type": "Expense Account" + }, + "Directiepersoneel": { + "account_number": "6201", + "account_type": "Expense Account" + }, + "Bedienden": { + "account_number": "6202", + "account_type": "Expense Account" + }, + "Arbeiders": { + "account_number": "6203", + "account_type": "Expense Account" + }, + "Andere personeelsleden": { + "account_number": "6204", + "account_type": "Expense Account" + }, + "account_number": "620", + "account_type": "Expense Account" + }, + "Werkgeversbijdragen voor sociale verzekeringen": { + "account_number": "621", + "account_type": "Expense Account" + }, + "Werkgeverspremies voor buitenwettelijke verzekeringen": { + "account_number": "622", + "account_type": "Expense Account" + }, + "Andere personeelskosten": { + "account_number": "623", + "account_type": "Expense Account" + }, + "Ouderdoms- en overlevingspensioenen": { + "Bestuurders of zaakvoerders": { + "account_number": "6240", + "account_type": "Expense Account" + }, + "Personeel": { + "account_number": "6241", + "account_type": "Expense Account" + }, + "account_number": "624", + "account_type": "Expense Account" + }, + "account_number": "62", + "account_type": "Expense Account" + }, + "Afschrijvingen, waardeverminderingen en voorzieningen voor risico's en kosten": { + "Afschrijvingen en waardeverminderingen op vaste activa-toevoeging": { + "Afschrijvingen op oprichtingskosten": { + "account_number": "6300", + "account_type": "Depreciation" + }, + "Afschrijvingen op immateriële vaste activa": { + "account_number": "6301", + "account_type": "Depreciation" + }, + "Afschrijvingen op materiële vaste activa": { + "account_number": "6302", + "account_type": "Depreciation" + }, + "Waardeverminderingen op immateriële vaste activa": { + "account_number": "6308", + "account_type": "Depreciation" + }, + "Waardeverminderingen op materiële vaste activa": { + "account_number": "6309", + "account_type": "Depreciation" + }, + "account_number": "630", + "account_type": "Depreciation" + }, + "Waardeverminderingen op voorraden": { + "Toevoeging": { + "account_number": "6310", + "account_type": "Depreciation" + }, + "Terugneming (-)": { + "account_number": "6311", + "account_type": "Depreciation" + }, + "account_number": "631", + "account_type": "Depreciation" + }, + "Waardeverminderingen op bestellingen in uitvoering": { + "Toevoeging": { + "account_number": "6320", + "account_type": "Depreciation" + }, + "Terugneming (-)": { + "account_number": "6321", + "account_type": "Depreciation" + }, + "account_number": "632", + "account_type": "Depreciation" + }, + "Waardeverminderingen op handelsvorderingen op meer dan één jaar": { + "Toevoeging": { + "account_number": "6330", + "account_type": "Depreciation" + }, + "Terugneming (-)": { + "account_number": "6331", + "account_type": "Depreciation" + }, + "account_number": "633", + "account_type": "Depreciation" + }, + "Waardeverminderingen op handelsvorderingen op ten hoogste één jaar": { + "Toevoeging": { + "account_number": "6340", + "account_type": "Depreciation" + }, + "Terugneming (-)": { + "account_number": "6341", + "account_type": "Depreciation" + }, + "account_number": "634", + "account_type": "Depreciation" + }, + "Voorzieningen voor pensioenen en soortgelijke verplichtingen": { + "Toevoeging": { + "account_number": "6350", + "account_type": "Depreciation" + }, + "Besteding en terugneming (-)": { + "account_number": "6351", + "account_type": "Depreciation" + }, + "account_number": "635", + "account_type": "Depreciation" + }, + "Voorzieningen voor grote herstellingswerken en grote onderhoudswerken": { + "Toevoeging": { + "account_number": "6360", + "account_type": "Depreciation" + }, + "Besteding en terugneming (-)": { + "account_number": "6361", + "account_type": "Depreciation" + }, + "account_number": "636", + "account_type": "Depreciation" + }, + "Voorzieningen voor milieuverplichtingen": { + "Toevoeging": { + "account_number": "6370", + "account_type": "Depreciation" + }, + "Besteding en terugneming (-)": { + "account_number": "6371", + "account_type": "Depreciation" + }, + "account_number": "637", + "account_type": "Depreciation" + }, + "Voorzieningen voor terug te betalen subsidies en legaten en voor schenkingen met terugnemingsrecht": { + "Toevoeging": { + "account_number": "6380", + "account_type": "Expense Account" + }, + "Besteding en terugneming (-)": { + "account_number": "6381", + "account_type": "Expense Account" + }, + "account_number": "638", + "account_type": "Expense Account" + }, + "Voorzieningen voor andere risico's en kosten": { + "Toevoeging": { + "account_number": "6390", + "account_type": "Expense Account" + }, + "Besteding en terugneming (-)": { + "account_number": "6391", + "account_type": "Expense Account" + }, + "account_number": "639", + "account_type": "Expense Account" + }, + "account_number": "63", + "account_type": "Expense Account" + }, + "Andere bedrijfskosten": { + "Bedrijfsbelastingen": { + "account_number": "640", + "account_type": "Expense Account" + }, + "Minderwaarden op de courante realisatie van materiële vaste activa": { + "account_number": "641", + "account_type": "Expense Account" + }, + "Minderwaarden op de realisatie van handelsvorderingen": { + "account_number": "642", + "account_type": "Expense Account" + }, + "Schenkingen": { + "account_number": "643", + "account_type": "Expense Account" + }, + "Diverse bedrijfskosten (644 tot 648)": { + "account_number": "644", + "account_type": "Expense Account" + }, + "Als herstructureringskosten geactiveerde bedrijfskosten (-)": { + "account_number": "649", + "account_type": "Expense Account" + }, + "account_number": "64", + "account_type": "Expense Account" + }, + "Financiële kosten": { + "Kosten van schulden": { + "Rente, commissies en kosten verbonden aan schulden": { + "account_number": "6500", + "account_type": "Expense Account" + }, + "Afschrijving van kosten bij uitgifte van leningen en van disagio": { + "account_number": "6501", + "account_type": "Expense Account" + }, + "Geactiveerde intercalaire interesten (-)": { + "account_number": "6502", + "account_type": "Expense Account" + }, + "account_number": "650", + "account_type": "Expense Account" + }, + "Waardeverminderingen op vlottende activa": { + "Toevoeging": { + "account_number": "6510", + "account_type": "Expense Account" + }, + "Terugneming (-)": { + "account_number": "6511", + "account_type": "Expense Account" + }, + "account_number": "651", + "account_type": "Expense Account" + }, + "Minderwaarden op verwezenlijking van vlottende activa": { + "account_number": "652", + "account_type": "Expense Account" + }, + "Discontokosten op vorderingen": { + "account_number": "653", + "account_type": "Expense Account" + }, + "Wisselresultaten": { + "account_number": "654", + "account_type": "Expense Account" + }, + "Resultaten uit de omrekening van vreemde valuta": { + "account_number": "655", + "account_type": "Expense Account" + }, + "Voorzieningen van financiële aard": { + "Toevoeging": { + "account_number": "6560", + "account_type": "Expense Account" + }, + "Besteding en terugneming (-)": { + "account_number": "6561", + "account_type": "Expense Account" + }, + "account_number": "656", + "account_type": "Expense Account" + }, + "Diverse financiële kosten (657 tot 658)": { + "account_number": "657", + "account_type": "Expense Account" + }, + "Als herstructureringskosten geactiveerde financiële kosten (-)": { + "account_number": "659", + "account_type": "Expense Account" + }, + "account_number": "65", + "account_type": "Expense Account" + }, + "Niet-recurrente bedrijfs- of financiële kosten": { + "Niet-recurrente afschrijvingen en waardeverminderingen (toevoeging)": { + "op oprichtingskosten": { + "account_number": "6600", + "account_type": "Expense Account" + }, + "op immateriële vaste activa": { + "account_number": "6601", + "account_type": "Expense Account" + }, + "op materiële vaste activa": { + "account_number": "6602", + "account_type": "Expense Account" + }, + "account_number": "660", + "account_type": "Expense Account" + }, + "Waardeverminderingen op vaste financiële activa (toevoeging)": { + "account_number": "661", + "account_type": "Expense Account" + }, + "Voorzieningen voor niet-recurrente risico's en kosten": { + "Voorzieningen voor niet-recurrente bedrijfsrisico's en -kosten": { + "Toevoeging": { + "account_number": "66200", + "account_type": "Expense Account" + }, + "Bestedingen (-)": { + "account_number": "66201", + "account_type": "Expense Account" + }, + "account_number": "6620", + "account_type": "Expense Account" + }, + "Voorzieningen voor niet-recurrente financiële risico's en -kosten": { + "Toevoeging": { + "account_number": "66210", + "account_type": "Expense Account" + }, + "Besteding (-)": { + "account_number": "66211", + "account_type": "Expense Account" + }, + "account_number": "6621", + "account_type": "Expense Account" + }, + "account_number": "662", + "account_type": "Expense Account" + }, + "Minderwaarden op de realisatie van vaste activa": { + "Minderwaarden op de realisatie van immateriële en materiële vaste activa": { + "account_number": "6630", + "account_type": "Expense Account" + }, + "Minderwaarden op de realisatie van financiële vaste activa": { + "account_number": "6631", + "account_type": "Expense Account" + }, + "account_number": "663", + "account_type": "Expense Account" + }, + "Andere niet-recurrente bedrijfskosten (664 tot 667)": { + "account_number": "664", + "account_type": "Expense Account" + }, + "Andere niet-recurrente financiële kosten": { + "account_number": "668", + "account_type": "Expense Account" + }, + "Als herstructureringskosten geactiveerde niet-recurrente bedrijfskosten (-)": { + "account_number": "6690", + "account_type": "Expense Account" + }, + "Als herstructureringskosten geactiveerde niet-recurrente financiële kosten (-)": { + "account_number": "6691", + "account_type": "Expense Account" + }, + "account_number": "66", + "account_type": "Expense Account" + }, + "Belastingen": { + "Belgische belastingen op het resultaat van het boekjaar": { + "Verschuldigde of gestorte belastingen en voorheffingen": { + "account_number": "6700", + "account_type": "Expense Account" + }, + "Geactiveerde overschotten van betaalde belastingen en voorheffingen (-)": { + "account_number": "6701", + "account_type": "Expense Account" + }, + "Geraamde belastingen": { + "account_number": "6702", + "account_type": "Expense Account" + }, + "account_number": "670", + "account_type": "Expense Account" + }, + "Buitenlandse belastingen op het resultaat van vorige boekjaren": { + "account_number": "673", + "account_type": "Expense Account" + }, + "Verschuldigde of gestorte belastingsupplementen": { + "account_number": "6710", + "account_type": "Expense Account" + }, + "Geraamde belastingsupplementen": { + "account_number": "6711", + "account_type": "Expense Account" + }, + "Gevormde fiscale voorzieningen": { + "account_number": "6712", + "account_type": "Expense Account" + }, + "account_number": "67", + "account_type": "Expense Account" + }, + "Overboeking naar de uitgestelde belastingen en naar de belastingvrije reserves": { + "Overboeking naar de uitgestelde belastingen": { + "account_number": "680", + "account_type": "Expense Account" + }, + "Overboeking naar de belastingvrije reserves": { + "account_number": "689", + "account_type": "Expense Account" + }, + "account_number": "68", + "account_type": "Expense Account" + }, + "Resultaatverwerking": { + "Overgedragen negatief resultaat van het vorig boekjaar": { + "account_number": "690", + "account_type": "Expense Account" + }, + "Overboeking naar de bestemde fondsen en andere reserves": { + "account_number": "691", + "account_type": "Expense Account" + }, + "Over te dragen positief resultaat": { + "account_number": "692", + "account_type": "Expense Account" + }, + "account_number": "69", + "account_type": "Expense Account" + } + }, + "KLASSE 7 : OPBRENGSTEN": { + "root_type": "Income", + "Omzet": { + "Toegekende kortingen, ristorno's en rabatten (-)": { + "account_number": "708", + "account_type": "Income Account" + }, + "account_number": "70", + "account_type": "Income Account" + }, + "Wijziging in de voorraad en bestellingen in uitvoering": { + "In de voorraad goederen in bewerking": { + "account_number": "712", + "account_type": "Income Account" + }, + "In de voorraad gereed product": { + "account_number": "713", + "account_type": "Income Account" + }, + "In de voorraad onroerende goederen bestemd voor verkoop": { + "account_number": "715", + "account_type": "Income Account" + }, + "In de bestellingen in uitvoering": { + "Aanschaffingswaarde": { + "account_number": "7170", + "account_type": "Income Account" + }, + "Toegerekende winst": { + "account_number": "7171", + "account_type": "Income Account" + }, + "account_number": "717", + "account_type": "Income Account" + }, + "account_number": "71", + "account_type": "Income Account" + }, + "Geproduceerde vaste activa": { + "account_number": "72", + "account_type": "Income Account" + }, + "Lidgeld, schenkingen, legaten en subsidies": { + "Lidgelden": { + "account_number": "730", + "account_type": "Income Account" + }, + "Schenkingen": { + "account_number": "731", + "account_type": "Income Account" + }, + "Legaten": { + "account_number": "732", + "account_type": "Income Account" + }, + "Subsidies": { + "account_number": "733", + "account_type": "Income Account" + }, + "account_number": "73", + "account_type": "Income Account" + }, + "Overige bedrijfsopbrengsten": { + "Meerwaarden op de courante realisatie van materiële vaste activa": { + "account_number": "741", + "account_type": "Income Account" + }, + "Meerwaarden op de realisatie van handelsvorderingen": { + "account_number": "742", + "account_type": "Income Account" + }, + "Diverse bedrijfsopbrengsten (743 tot 749)": { + "account_number": "743", + "account_type": "Income Account" + }, + "account_number": "74", + "account_type": "Income Account" + }, + "Financiële opbrengsten": { + "Opbrengsten uit financiële vaste activa": { + "account_number": "750", + "account_type": "Income Account" + }, + "Opbrengsten uit vlottende activa": { + "account_number": "751", + "account_type": "Income Account" + }, + "Meerwaarden op de realisatie van vlottende activa": { + "account_number": "752", + "account_type": "Income Account" + }, + "Wisselresultaten": { + "account_number": "754", + "account_type": "Income Account" + }, + "Resultaten uit de omrekening van vreemde valuta": { + "account_number": "755", + "account_type": "Income Account" + }, + "Diverse financiële opbrengsten (756 tot 759)": { + "account_number": "756", + "account_type": "Income Account" + }, + "account_number": "75", + "account_type": "Income Account" + }, + "Niet-recurrente bedrijfs- of financiële opbrengsten": { + "Terugneming van afschrijvingen en waardeverminderingen": { + "op immateriële vaste activa": { + "account_number": "7600", + "account_type": "Income Account" + }, + "op materiële vaste activa": { + "account_number": "7601", + "account_type": "Income Account" + }, + "account_number": "760", + "account_type": "Income Account" + }, + "Terugneming van waardeverminderingen op financiële vaste activa": { + "account_number": "761", + "account_type": "Income Account" + }, + "Terugneming van voorzieningen voor niet-recurrente risico's en kosten": { + "Terugneming van voorzieningen voor niet-recurrente bedrijfsrisico's en -kosten": { + "account_number": "7620", + "account_type": "Income Account" + }, + "Terugneming van voorzieningen voor niet-recurrente financiële risico's en -kosten": { + "account_number": "7621", + "account_type": "Income Account" + }, + "account_number": "762", + "account_type": "Income Account" + }, + "Meerwaarden op de realisatie van vaste activa": { + "Meerwaarde op de realisatie van immateriële en materiële vaste activa": { + "account_number": "7630", + "account_type": "Income Account" + }, + "Meerwaarde op de realisatie van financiële vaste activa": { + "account_number": "7631", + "account_type": "Income Account" + }, + "account_number": "763", + "account_type": "Income Account" + }, + "Andere niet-recurrente bedrijfsopbrengsten (764 tot 768)": { + "account_number": "764", + "account_type": "Income Account" + }, + "Andere niet-recurrente financiële opbrengsten": { + "account_number": "769", + "account_type": "Income Account" + }, + "account_number": "76", + "account_type": "Income Account" + }, + "Regularisering van belastingen": { + "account_number": "77", + "account_type": "Income Account" + }, + "Onttrekking aan de belastingvrije reserves en uitgestelde belastingen": { + "Onttrekking aan de uitgestelde belastingen": { + "account_number": "780", + "account_type": "Income Account" + }, + "Onttrekking aan de belastingvrije reserves": { + "account_number": "789", + "account_type": "Income Account" + }, + "account_number": "78", + "account_type": "Income Account" + }, + "Resultaatverwerking": { + "Overgedragen positief resultaat van het vorige boekjaar": { + "account_number": "790", + "account_type": "Income Account" + }, + "Andere reserves": { + "account_number": "791", + "account_type": "Income Account" + }, + "Over te dragen negatief resultaat": { + "account_number": "792", + "account_type": "Income Account" + }, + "account_number": "79", + "account_type": "Income Account" + } + } + } +} \ No newline at end of file diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_plan_comptable_minimum_normalise_associations_fondations.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_plan_comptable_minimum_normalise_associations_fondations.json new file mode 100644 index 00000000000..5191aa32de9 --- /dev/null +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_plan_comptable_minimum_normalise_associations_fondations.json @@ -0,0 +1,1478 @@ +{ + "country_code": "be", + "name": "Belgique - Plan comptable minimum normalisé (PCMN) des associations et fondations", + "tree": { + "CLASSE 1 : FONDS ASSOCIATIFS ET DE LA FONDATION": { + "root_type": "Equity", + "Fonds de l'association ou de la fondation": { + "account_number": "10", + "account_type": "Equity" + }, + "Plus-values de réévaluation": { + "Plus-values de réévaluation sur immobilisations incorporelles": { + "account_number": "120", + "account_type": "Equity" + }, + "Plus-values de réévaluation sur immobilisations corporelles": { + "account_number": "121", + "account_type": "Equity" + }, + "Plus-values de réévaluation sur immobilisations financières": { + "account_number": "122", + "account_type": "Equity" + }, + "Reprises de réductions de valeur sur placements de trésorerie": { + "account_number": "124", + "account_type": "Equity" + }, + "account_number": "12", + "account_type": "Equity" + }, + "Fonds affectés et autres réserves": { + "Fonds affectés pour investissements": { + "account_number": "130", + "account_type": "Equity" + }, + "Fonds affectés pour passif social": { + "account_number": "131", + "account_type": "Equity" + }, + "Réserves immunisées": { + "account_number": "132", + "account_type": "Equity" + }, + "Autres fonds affectés et autres réserves": { + "account_number": "139", + "account_type": "Equity" + }, + "account_number": "13", + "account_type": "Equity" + }, + "Résultats reportés (+)(-)": { + "account_number": "14", + "account_type": "Equity" + }, + "Subsides en capital": { + "account_number": "15", + "account_type": "Equity" + } + }, + "CLASSE 1 : PROVISIONS ET DETTES À PLUS D'UN AN": { + "root_type": "Liability", + "Provisions et impôts différés": { + "Provisions pour pensions et obligations similaires": { + "account_number": "160", + "account_type": "Liability" + }, + "Provisions pour charges fiscales": { + "account_number": "161", + "account_type": "Liability" + }, + "Provisions pour grosses réparations et gros entretien": { + "account_number": "162", + "account_type": "Liability" + }, + "Provisions pour obligations environnementales": { + "account_number": "163", + "account_type": "Liability" + }, + "Provisions pour remboursement de subsides, legs et dons avec droit de reprise": { + "account_number": "167", + "account_type": "Liability" + }, + "Impôts différés": { + "account_number": "168", + "account_type": "Liability" + }, + "account_number": "16", + "account_type": "Liability" + }, + "Dettes à plus d'un an": { + "Emprunts subordonnés": { + "account_number": "170", + "account_type": "Liability" + }, + "Emprunts obligataires non subordonnés": { + "account_number": "171", + "account_type": "Liability" + }, + "Dettes de location-financement et dettes assimilées": { + "account_number": "172", + "account_type": "Liability" + }, + "Établissements de crédit": { + "Dettes en compte": { + "account_number": "1730", + "account_type": "Liability" + }, + "Promesses": { + "account_number": "1731", + "account_type": "Liability" + }, + "Crédits d'acceptation": { + "account_number": "1732", + "account_type": "Liability" + }, + "account_number": "173", + "account_type": "Liability" + }, + "Autres emprunts": { + "account_number": "174", + "account_type": "Liability" + }, + "Dettes commerciales": { + "Fournisseurs": { + "account_number": "1750", + "account_type": "Liability" + }, + "Effets à payer": { + "account_number": "1751", + "account_type": "Liability" + }, + "account_number": "175", + "account_type": "Liability" + }, + "Acomptes sur commandes": { + "account_number": "176", + "account_type": "Liability" + }, + "Cautionnements en numéraire": { + "account_number": "178", + "account_type": "Liability" + }, + "Autres dettes": { + "Productives d'intérêts": { + "account_number": "1790", + "account_type": "Liability" + }, + "Non productives d'intérêts ou assorties d'un intérêt anormalement faible": { + "account_number": "1791", + "account_type": "Liability" + }, + "account_number": "179", + "account_type": "Liability" + }, + "account_number": "17", + "account_type": "Liability" + } + }, + "CLASSE 2 : FRAIS D'ÉTABLISSEMENT, ACTIFS IMMOBILISÉS ET CRÉANCES À PLUS D'UN AN": { + "root_type": "Asset", + "Frais d'établissement": { + "Frais de constitution": { + "account_number": "200", + "account_type": "Fixed Asset" + }, + "Frais d'émission d'emprunts": { + "account_number": "201", + "account_type": "Fixed Asset" + }, + "Autres frais d'établissement": { + "account_number": "202", + "account_type": "Fixed Asset" + }, + "Frais de restructuration": { + "account_number": "204", + "account_type": "Fixed Asset" + }, + "account_number": "20", + "account_type": "Fixed Asset" + }, + "Immobilisations incorporelles": { + "Frais de recherche et de développement": { + "account_number": "210", + "account_type": "Fixed Asset" + }, + "Concessions, brevets, licences, savoir-faire, marques et droits similaires": { + "account_number": "211", + "account_type": "Fixed Asset" + }, + "Goodwill": { + "account_number": "212", + "account_type": "Fixed Asset" + }, + "Acomptes versés": { + "account_number": "213", + "account_type": "Fixed Asset" + }, + "Amortissements et réductions de valeur actées (-)": { + "account_number": "219", + "account_type": "Accumulated Depreciation" + }, + "account_number": "21", + "account_type": "Fixed Asset" + }, + "Terrains et constructions": { + "Terrains": { + "account_number": "220", + "account_type": "Fixed Asset" + }, + "Constructions": { + "account_number": "221", + "account_type": "Fixed Asset" + }, + "Terrains bâtis": { + "account_number": "222", + "account_type": "Fixed Asset" + }, + "Autres droits réels sur des immeubles": { + "account_number": "223", + "account_type": "Fixed Asset" + }, + "Amortissements et réductions de valeur actées (-)": { + "account_number": "229", + "account_type": "Accumulated Depreciation" + }, + "account_number": "22", + "account_type": "Fixed Asset" + }, + "Installations, machines et outillage": { + "account_number": "23", + "account_type": "Fixed Asset" + }, + "Mobilier et matériel roulant": { + "account_number": "24", + "account_type": "Fixed Asset" + }, + "Immobilisations détenues en location-financement et droits similaires": { + "Terrains et constructions": { + "account_number": "250", + "account_type": "Fixed Asset" + }, + "Installations, machines et outillage": { + "account_number": "251", + "account_type": "Fixed Asset" + }, + "Mobilier et matériel roulant": { + "account_number": "252", + "account_type": "Fixed Asset" + }, + "Amortissements et réductions de valeur actées (-)": { + "account_number": "259", + "account_type": "Accumulated Depreciation" + }, + "account_number": "25", + "account_type": "Fixed Asset" + }, + "Autres immobilisations corporelles": { + "account_number": "26", + "account_type": "Fixed Asset" + }, + "Immobilisations corporelles en cours et acomptes versés": { + "account_number": "27", + "account_type": "Fixed Asset" + }, + "Immobilisations financières": { + "Participations dans des sociétés liées": { + "Valeur d'acquisition": { + "account_number": "2800", + "account_type": "Fixed Asset" + }, + "Montants non appelés (-)": { + "account_number": "2801", + "account_type": "Fixed Asset" + }, + "Plus-values actées": { + "account_number": "2808", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2809", + "account_type": "Fixed Asset" + }, + "account_number": "280", + "account_type": "Fixed Asset" + }, + "Créances sur des entités liées": { + "Créances en compte": { + "account_number": "2810", + "account_type": "Fixed Asset" + }, + "Effets à recevoir": { + "account_number": "2811", + "account_type": "Fixed Asset" + }, + "Titres à revenu fixe": { + "account_number": "2812", + "account_type": "Fixed Asset" + }, + "Créances douteuses": { + "account_number": "2817", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2819", + "account_type": "Fixed Asset" + }, + "account_number": "281", + "account_type": "Fixed Asset" + }, + "Participations dans des sociétés avec lesquelles il existe un lien de participation": { + "Valeur d'acquisition": { + "account_number": "2820", + "account_type": "Fixed Asset" + }, + "Montants non appelés (-)": { + "account_number": "2821", + "account_type": "Fixed Asset" + }, + "Plus-values actées": { + "account_number": "2828", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2829", + "account_type": "Fixed Asset" + }, + "account_number": "282", + "account_type": "Fixed Asset" + }, + "Créances sur des sociétés avec lesquelles il existe un lien de participation": { + "Créances en compte": { + "account_number": "2830", + "account_type": "Fixed Asset" + }, + "Effets à recevoir": { + "account_number": "2831", + "account_type": "Fixed Asset" + }, + "Titres à revenu fixe": { + "account_number": "2832", + "account_type": "Fixed Asset" + }, + "Créances douteuses": { + "account_number": "2837", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2839", + "account_type": "Fixed Asset" + }, + "account_number": "283", + "account_type": "Fixed Asset" + }, + "Autres actions et parts": { + "Valeur d'acquisition": { + "account_number": "2840", + "account_type": "Fixed Asset" + }, + "Montants non appelés (-)": { + "account_number": "2841", + "account_type": "Fixed Asset" + }, + "Plus-values actées": { + "account_number": "2848", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2849", + "account_type": "Fixed Asset" + }, + "account_number": "284", + "account_type": "Fixed Asset" + }, + "Autres créances": { + "Créances en compte": { + "account_number": "2850", + "account_type": "Fixed Asset" + }, + "Effets à recevoir": { + "account_number": "2851", + "account_type": "Fixed Asset" + }, + "Titres à revenu fixe": { + "account_number": "2852", + "account_type": "Fixed Asset" + }, + "Créances douteuses": { + "account_number": "2857", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2859", + "account_type": "Fixed Asset" + }, + "account_number": "285", + "account_type": "Fixed Asset" + }, + "Cautionnements versés en numéraire": { + "account_number": "288", + "account_type": "Fixed Asset" + }, + "account_number": "28", + "account_type": "Fixed Asset" + }, + "Créances à plus d'un an": { + "Créances commerciales": { + "Clients": { + "account_number": "2900" + }, + "Effets à recevoir": { + "account_number": "2901" + }, + "Acomptes versés": { + "account_number": "2906" + }, + "Créances douteuses": { + "account_number": "2907" + }, + "Réductions de valeur actées (-)": { + "account_number": "2909" + }, + "account_number": "290" + }, + "Autres créances": { + "Créances en compte": { + "account_number": "2910" + }, + "Effets à recevoir": { + "account_number": "2911" + }, + "Subsides à recevoir": { + "account_number": "2912" + }, + "Créances non productives d'intérêts ou assorties d'un intérêt anormalement faible": { + "account_number": "2915" + }, + "Créances douteuses": { + "account_number": "2916" + }, + "Réductions de valeur actées (-)": { + "account_number": "2919" + }, + "account_number": "291" + }, + "account_number": "29" + } + }, + "CLASSE 3 : STOCKS ET COMMANDES EN COURS D'EXÉCUTION": { + "root_type": "Asset", + "Matières premières": { + "Valeur d'acquisition": { + "account_number": "300" + }, + "Réductions de valeur actées (-)": { + "account_number": "309" + }, + "account_number": "30" + }, + "Fournitures": { + "Valeur d'acquisition": { + "account_number": "310" + }, + "Réductions de valeur actées (-)": { + "account_number": "319" + }, + "account_number": "31" + }, + "En-cours de fabrication": { + "Valeur d'acquisition": { + "account_number": "320" + }, + "Réductions de valeur actées (-)": { + "account_number": "329" + }, + "account_number": "32" + }, + "Produits finis": { + "Valeur d'acquisition": { + "account_number": "330" + }, + "Réductions de valeur actées (-)": { + "account_number": "339" + }, + "account_number": "33" + }, + "Marchandises": { + "Valeur d'acquisition": { + "account_number": "340", + "account_type": "Stock" + }, + "Réductions de valeur actées (-)": { + "account_number": "349" + }, + "account_number": "34", + "account_type": "Stock" + }, + "Immeubles destinés à la vente": { + "Valeur d'acquisition": { + "account_number": "350" + }, + "Réductions de valeur actées (-)": { + "account_number": "359" + }, + "account_number": "35" + }, + "Acomptes versés sur achats pour stocks": { + "Acomptes versés": { + "account_number": "360" + }, + "Réductions de valeur actées (-)": { + "account_number": "369" + }, + "account_number": "36" + }, + "Commandes en cours d'exécution": { + "Valeur d'acquisition": { + "account_number": "370" + }, + "Bénéfice pris en compte": { + "account_number": "371" + }, + "Réductions de valeur actées (-)": { + "account_number": "379" + }, + "account_number": "37" + }, + "Stock livré non facturé": { + "account_type": "Stock Delivered But Not Billed" + } + }, + "CLASSE 4 : CRÉANCES À UN AN AU PLUS": { + "root_type": "Asset", + "Créances commerciales": { + "Clients": { + "account_number": "400", + "account_type": "Receivable" + }, + "Effets à recevoir": { + "account_number": "401", + "account_type": "Receivable" + }, + "Produits à recevoir": { + "account_number": "404", + "account_type": "Receivable" + }, + "Acomptes versés": { + "account_number": "406" + }, + "Créances douteuses": { + "account_number": "407", + "account_type": "Receivable" + }, + "Réductions de valeur actées (-)": { + "account_number": "409" + }, + "account_number": "40", + "account_type": "Receivable" + }, + "Autres créances": { + "TVA à récupérer": { + "account_number": "411", + "account_type": "Tax" + }, + "Impôts et précomptes à récupérer": { + "Autres impôts et taxes belges (4125 à 4127)": { + "account_number": "4125" + }, + "Impôts et taxes étrangers": { + "account_number": "4128" + }, + "account_number": "412" + }, + "Subsides à recevoir": { + "account_number": "413" + }, + "Produits à recevoir": { + "account_number": "414" + }, + "Créances non productives d'intérêts ou assorties d'un intérêt anormalement faible": { + "account_number": "415" + }, + "Créances diverses": { + "account_number": "416" + }, + "Créances douteuses": { + "account_number": "417" + }, + "Cautionnements versés en numéraire": { + "account_number": "418" + }, + "Réductions de valeur actées (-)": { + "account_number": "419" + }, + "account_number": "41" + } + }, + "CLASSE 4 : DETTES À UN AN AU PLUS": { + "root_type": "Liability", + "Dettes à plus d'un an échéant dans l'année": { + "account_number": "42" + }, + "Dettes financières": { + "Établissements de crédit - Emprunts en compte à terme fixe": { + "account_number": "430" + }, + "Établissements de crédit - Promesses": { + "account_number": "431" + }, + "Établissements de crédit - Crédits d'acceptation": { + "account_number": "432" + }, + "Établissements de crédit - Dettes en compte courant": { + "account_number": "433" + }, + "Autres emprunts": { + "account_number": "439" + }, + "account_number": "43" + }, + "Dettes commerciales": { + "Fournisseurs": { + "account_number": "440", + "account_type": "Payable" + }, + "Effets à payer": { + "account_number": "441", + "account_type": "Payable" + }, + "Factures à recevoir": { + "account_number": "444", + "account_type": "Stock Received But Not Billed" + }, + "account_number": "44", + "account_type": "Payable" + }, + "Dettes fiscales, salariales et sociales": { + "Dettes fiscales estimées": { + "Autres impôts et taxes belges (4505 à 4507)": { + "account_number": "4505" + }, + "Impôts et taxes étrangers": { + "account_number": "4508" + }, + "account_number": "450" + }, + "TVA à payer": { + "account_number": "451", + "account_type": "Tax" + }, + "Impôts et taxes à payer": { + "Autres impôts et taxes belges (4525 à 4527)": { + "account_number": "4525" + }, + "Impôts et taxes étrangers": { + "account_number": "4528" + }, + "account_number": "452" + }, + "Précomptes retenus": { + "account_number": "453" + }, + "Office national de la Sécurité sociale": { + "account_number": "454" + }, + "Rémunérations": { + "account_number": "455" + }, + "Pécules de vacances": { + "account_number": "456" + }, + "Autres dettes sociales": { + "account_number": "459" + }, + "account_number": "45" + }, + "Comptes de régularisation et d'attente": { + "Charges à reporter": { + "account_number": "490" + }, + "Produits acquis": { + "account_number": "491" + }, + "Charges à imputer": { + "account_number": "492" + }, + "Produits à reporter": { + "account_number": "493" + }, + "Comptes d'attente": { + "account_number": "499" + }, + "account_number": "49" + }, + "Obligations et coupons échus": { + "account_number": "480" + }, + "Subsides à rembourser": { + "account_number": "483" + }, + "Cautionnements reçus en numéraire": { + "account_number": "488" + }, + "Autres dettes diverses": { + "Productives d'intérêts": { + "account_number": "4890" + }, + "Non productives d'intérêts ou assorties d'un intérêt anormalement faible": { + "account_number": "4891" + }, + "account_number": "489" + } + }, + "CLASSE 5 : PLACEMENTS DE TRÉSORERIE ET VALEURS DISPONIBLES": { + "root_type": "Asset", + "Placements de trésorerie autres que actions et parts, titres à revenu fixe et dépôts à terme": { + "Valeur d'acquisition": { + "account_number": "500" + }, + "Réductions de valeur actées (-)": { + "account_number": "509" + }, + "account_number": "50" + }, + "Actions et parts": { + "Valeur d'acquisition": { + "account_number": "510" + }, + "Montants non appelés (-)": { + "account_number": "511" + }, + "Réductions de valeur actées (-)": { + "account_number": "519" + }, + "account_number": "51" + }, + "Titres à revenu fixe": { + "Valeur d'acquisition": { + "account_number": "520" + }, + "Réductions de valeur actées (-)": { + "account_number": "529" + }, + "account_number": "52" + }, + "Dépôts à terme": { + "De plus d'un an": { + "account_number": "530" + }, + "De plus d'un mois et à un an au plus": { + "account_number": "531" + }, + "D'un mois au plus": { + "account_number": "532" + }, + "Réductions de valeur actées (-)": { + "account_number": "539" + }, + "account_number": "53" + }, + "Valeurs échues à l'encaissement": { + "account_number": "54" + }, + "Établissements de crédit": { + "Banque": { + "account_number": "5500", + "account_type": "Bank" + }, + "account_number": "55", + "account_type": "Bank" + }, + "Caisses": { + "Caisses-espèces (570 à 577)": { + "account_number": "570", + "account_type": "Cash" + }, + "Caisses-timbres": { + "account_number": "578", + "account_type": "Cash" + }, + "account_number": "57", + "account_type": "Cash" + }, + "Virements internes": { + "account_number": "58", + "account_type": "Temporary" + } + }, + "CLASSE 6 : CHARGES": { + "root_type": "Expense", + "Approvisionnements et marchandises": { + "Achats de matières premières": { + "account_number": "600", + "account_type": "Expense Account" + }, + "Achats de fournitures": { + "account_number": "601", + "account_type": "Expense Account" + }, + "Achats de services, travaux et études": { + "account_number": "602", + "account_type": "Expense Account" + }, + "Sous-traitances générales": { + "account_number": "603", + "account_type": "Expense Account" + }, + "Achats de marchandises": { + "account_number": "604", + "account_type": "Cost of Goods Sold" + }, + "Achats d'immeubles destinés à la vente": { + "account_number": "605", + "account_type": "Expense Account" + }, + "Remises, ristournes et rabais obtenus (-)": { + "account_number": "608", + "account_type": "Expense Account" + }, + "Variations des stocks": { + "de matières premières": { + "account_number": "6090", + "account_type": "Stock Adjustment" + }, + "de fournitures": { + "account_number": "6091", + "account_type": "Stock Adjustment" + }, + "de marchandises": { + "account_number": "6094", + "account_type": "Stock Adjustment" + }, + "d'immeubles destinés à la vente": { + "account_number": "6095", + "account_type": "Stock Adjustment" + }, + "account_number": "609", + "account_type": "Stock Adjustment" + }, + "account_number": "60", + "account_type": "Expense Account" + }, + "Services et biens divers": { + "Personnel intérimaire et personnes mises à la disposition de l'association ou de la fondation": { + "account_number": "617", + "account_type": "Expense Account" + }, + "Rémunérations et pensions des administrateurs, hors contrat de travail": { + "account_number": "618", + "account_type": "Expense Account" + }, + "Frais accessoires d'achat inclus dans la valeur des stocks": { + "account_type": "Expenses Included In Valuation" + }, + "account_number": "61", + "account_type": "Expense Account" + }, + "Rémunérations, charges sociales et pensions": { + "Rémunérations et avantages sociaux directs": { + "Administrateurs ou gérants": { + "account_number": "6200", + "account_type": "Expense Account" + }, + "Personnel de direction": { + "account_number": "6201", + "account_type": "Expense Account" + }, + "Employés": { + "account_number": "6202", + "account_type": "Expense Account" + }, + "Ouvriers": { + "account_number": "6203", + "account_type": "Expense Account" + }, + "Autres membres du personnel": { + "account_number": "6204", + "account_type": "Expense Account" + }, + "account_number": "620", + "account_type": "Expense Account" + }, + "Cotisations patronales pour assurances sociales": { + "account_number": "621", + "account_type": "Expense Account" + }, + "Primes patronales pour assurances extra-légales": { + "account_number": "622", + "account_type": "Expense Account" + }, + "Autres frais du personnel": { + "account_number": "623", + "account_type": "Expense Account" + }, + "Pensions de retraite et de survie": { + "Administrateurs ou gérants": { + "account_number": "6240", + "account_type": "Expense Account" + }, + "Personnel": { + "account_number": "6241", + "account_type": "Expense Account" + }, + "account_number": "624", + "account_type": "Expense Account" + }, + "account_number": "62", + "account_type": "Expense Account" + }, + "Amortissements, réductions de valeur et provisions pour risques et charges": { + "Dotations aux amortissements et aux réductions de valeur sur immobilisations": { + "Dotations aux amortissements sur frais d'établissement": { + "account_number": "6300", + "account_type": "Depreciation" + }, + "Dotation aux amortissements sur immobilisations incorporelles": { + "account_number": "6301", + "account_type": "Depreciation" + }, + "Dotation aux amortissements sur immobilisations corporelles": { + "account_number": "6302", + "account_type": "Depreciation" + }, + "Dotation aux réductions de valeur sur immobilisations incorporelles": { + "account_number": "6308", + "account_type": "Depreciation" + }, + "Dotation aux réductions de valeur sur immobilisations corporelles": { + "account_number": "6309", + "account_type": "Depreciation" + }, + "account_number": "630", + "account_type": "Depreciation" + }, + "Réductions de valeur sur stocks": { + "Dotations": { + "account_number": "6310", + "account_type": "Depreciation" + }, + "Reprises (-)": { + "account_number": "6311", + "account_type": "Depreciation" + }, + "account_number": "631", + "account_type": "Depreciation" + }, + "Réductions de valeur sur commandes en cours d'exécution": { + "Dotations": { + "account_number": "6320", + "account_type": "Depreciation" + }, + "Reprises (-)": { + "account_number": "6321", + "account_type": "Depreciation" + }, + "account_number": "632", + "account_type": "Depreciation" + }, + "Réductions de valeur sur créances commerciales à plus d'un an": { + "Dotations": { + "account_number": "6330", + "account_type": "Depreciation" + }, + "Reprises (-)": { + "account_number": "6331", + "account_type": "Depreciation" + }, + "account_number": "633", + "account_type": "Depreciation" + }, + "Réductions de valeur sur créances à un an au plus": { + "Dotations": { + "account_number": "6340", + "account_type": "Depreciation" + }, + "Reprises (-)": { + "account_number": "6341", + "account_type": "Depreciation" + }, + "account_number": "634", + "account_type": "Depreciation" + }, + "Provisions pour pensions et obligations similaires": { + "Dotations": { + "account_number": "6350", + "account_type": "Depreciation" + }, + "Utilisations et reprises (-)": { + "account_number": "6351", + "account_type": "Depreciation" + }, + "account_number": "635", + "account_type": "Depreciation" + }, + "Provisions pour grosses réparations et gros entretien": { + "Dotations": { + "account_number": "6360", + "account_type": "Depreciation" + }, + "Utilisations et reprises (-)": { + "account_number": "6361", + "account_type": "Depreciation" + }, + "account_number": "636", + "account_type": "Depreciation" + }, + "Provisions pour obligations environnementales": { + "Dotations": { + "account_number": "6370", + "account_type": "Depreciation" + }, + "Utilisations et reprises (-)": { + "account_number": "6371", + "account_type": "Depreciation" + }, + "account_number": "637", + "account_type": "Depreciation" + }, + "Provisions pour subsides et legs à rembourser et pour dons avec droit de reprise": { + "Dotations": { + "account_number": "6380", + "account_type": "Expense Account" + }, + "Utilisations et reprises (-)": { + "account_number": "6381", + "account_type": "Expense Account" + }, + "account_number": "638", + "account_type": "Expense Account" + }, + "Provisions pour autres risques et charges": { + "Dotations": { + "account_number": "6390", + "account_type": "Expense Account" + }, + "Utilisations et reprises (-)": { + "account_number": "6391", + "account_type": "Expense Account" + }, + "account_number": "639", + "account_type": "Expense Account" + }, + "account_number": "63", + "account_type": "Expense Account" + }, + "Autres charges d'exploitation": { + "Charges fiscales": { + "account_number": "640", + "account_type": "Expense Account" + }, + "Moins-values sur réalisations courantes d'immobilisations corporelles": { + "account_number": "641", + "account_type": "Expense Account" + }, + "Moins-values sur réalisations de créances commerciales": { + "account_number": "642", + "account_type": "Expense Account" + }, + "Dons": { + "account_number": "643", + "account_type": "Expense Account" + }, + "Charges d'exploitations diverses (644 à 648)": { + "account_number": "644", + "account_type": "Expense Account" + }, + "Charges d'exploitation portées à l'actif au titre de frais de restructuration (-)": { + "account_number": "649", + "account_type": "Expense Account" + }, + "account_number": "64", + "account_type": "Expense Account" + }, + "Charges financières": { + "Charges des dettes": { + "Intérêts, commissions et frais afférents aux dettes": { + "account_number": "6500", + "account_type": "Expense Account" + }, + "Amortissements frais d'émission d'emprunts et des primes de remboursement": { + "account_number": "6501", + "account_type": "Expense Account" + }, + "Intérêts intercalaires portés à l'actif (-)": { + "account_number": "6502", + "account_type": "Expense Account" + }, + "account_number": "650", + "account_type": "Expense Account" + }, + "Réductions de valeur sur actifs circulants": { + "Dotations": { + "account_number": "6510", + "account_type": "Expense Account" + }, + "Reprises (-)": { + "account_number": "6511", + "account_type": "Expense Account" + }, + "account_number": "651", + "account_type": "Expense Account" + }, + "Moins-values sur réalisation d'actifs circulants": { + "account_number": "652", + "account_type": "Expense Account" + }, + "Charges d'escompte de créances": { + "account_number": "653", + "account_type": "Expense Account" + }, + "Différences de change": { + "account_number": "654", + "account_type": "Expense Account" + }, + "Écarts de conversion des devises": { + "account_number": "655", + "account_type": "Expense Account" + }, + "Provisions à caractère financier": { + "Dotations": { + "account_number": "6560", + "account_type": "Expense Account" + }, + "Utilisations et reprises (-)": { + "account_number": "6561", + "account_type": "Expense Account" + }, + "account_number": "656", + "account_type": "Expense Account" + }, + "Charges financières diverses (657 à 658)": { + "account_number": "657", + "account_type": "Expense Account" + }, + "Charges financières portées à l'actif au titre de frais de restructuration (-)": { + "account_number": "659", + "account_type": "Expense Account" + }, + "account_number": "65", + "account_type": "Expense Account" + }, + "Charges d'exploitation ou financières non récurrentes": { + "Amortissements et réductions de valeur non récurrents (dotations)": { + "sur frais d'établissement": { + "account_number": "6600", + "account_type": "Expense Account" + }, + "sur immobilisations incorporelles": { + "account_number": "6601", + "account_type": "Expense Account" + }, + "sur immobilisations corporelles": { + "account_number": "6602", + "account_type": "Expense Account" + }, + "account_number": "660", + "account_type": "Expense Account" + }, + "Réduction de valeur sur immobilisations financières (dotation)": { + "account_number": "661", + "account_type": "Expense Account" + }, + "Provisions pour risques et charges non récurrents": { + "Provisions pour risques et charges d'exploitation non récurrents": { + "Dotations": { + "account_number": "66200", + "account_type": "Expense Account" + }, + "Utilisations (-)": { + "account_number": "66201", + "account_type": "Expense Account" + }, + "account_number": "6620", + "account_type": "Expense Account" + }, + "Provisions pour risques et charges financiers non récurrents": { + "Dotations": { + "account_number": "66210", + "account_type": "Expense Account" + }, + "Utilisations (-)": { + "account_number": "66211", + "account_type": "Expense Account" + }, + "account_number": "6621", + "account_type": "Expense Account" + }, + "account_number": "662", + "account_type": "Expense Account" + }, + "Moins-values sur réalisation d'actifs immobilisés": { + "Moins-values sur réalisation d'immobilisations incorporelles et corporelles": { + "account_number": "6630", + "account_type": "Expense Account" + }, + "Moins-values sur réalisation d'immobilisations financières": { + "account_number": "6631", + "account_type": "Expense Account" + }, + "account_number": "663", + "account_type": "Expense Account" + }, + "Autres charges d'exploitation non récurrentes (664 à 667)": { + "account_number": "664", + "account_type": "Expense Account" + }, + "Autres charges financières non récurrentes": { + "account_number": "668", + "account_type": "Expense Account" + }, + "Charges d'exploitation portées à l'actif au titre de frais de restructuration (-)": { + "account_number": "6690", + "account_type": "Expense Account" + }, + "Charges financières non récurrentes portées à l'actif au titre de frais de restructuration (-)": { + "account_number": "6691", + "account_type": "Expense Account" + }, + "account_number": "66", + "account_type": "Expense Account" + }, + "Impôts": { + "Impôts belges sur le résultat de l'exercice": { + "Impôts et précomptes dus ou versés": { + "account_number": "6700", + "account_type": "Expense Account" + }, + "Excédent de versements d'impôts et de précomptes porté à l'actif (-)": { + "account_number": "6701", + "account_type": "Expense Account" + }, + "Charges fiscales estimées": { + "account_number": "6702", + "account_type": "Expense Account" + }, + "account_number": "670", + "account_type": "Expense Account" + }, + "Impôts belges sur le résultat d'exercices antérieurs": { + "account_number": "673", + "account_type": "Expense Account" + }, + "Suppléments d'impôts dus ou versés": { + "account_number": "6710", + "account_type": "Expense Account" + }, + "Suppléments d'impôts estimés": { + "account_number": "6711", + "account_type": "Expense Account" + }, + "Provisions fiscales constituées": { + "account_number": "6712", + "account_type": "Expense Account" + }, + "account_number": "67", + "account_type": "Expense Account" + }, + "Transferts aux impôts différés et aux réserves immunisées": { + "Transferts aux impôts différés": { + "account_number": "680", + "account_type": "Expense Account" + }, + "Transferts aux réserves immunisées": { + "account_number": "689", + "account_type": "Expense Account" + }, + "account_number": "68", + "account_type": "Expense Account" + }, + "Affectations et prélèvements": { + "Résultat négatif de l'exercice antérieur reporté": { + "account_number": "690", + "account_type": "Expense Account" + }, + "Transfert aux fonds affectés et autres réserves": { + "account_number": "691", + "account_type": "Expense Account" + }, + "Résultat positif à reporter": { + "account_number": "692", + "account_type": "Expense Account" + }, + "account_number": "69", + "account_type": "Expense Account" + } + }, + "CLASSE 7 : PRODUITS": { + "root_type": "Income", + "Chiffre d'affaires": { + "Remises, ristournes et rabais accordés (-)": { + "account_number": "708", + "account_type": "Income Account" + }, + "account_number": "70", + "account_type": "Income Account" + }, + "Variation des stocks et des commandes en cours d'exécution": { + "Des en-cours de fabrication": { + "account_number": "712", + "account_type": "Income Account" + }, + "Des produits finis": { + "account_number": "713", + "account_type": "Income Account" + }, + "Des immeubles construits destinés à la vente": { + "account_number": "715", + "account_type": "Income Account" + }, + "Des commandes en cours d'exécution": { + "Valeur d'acquisition": { + "account_number": "7170", + "account_type": "Income Account" + }, + "Bénéfice pris en compte": { + "account_number": "7171", + "account_type": "Income Account" + }, + "account_number": "717", + "account_type": "Income Account" + }, + "account_number": "71", + "account_type": "Income Account" + }, + "Production immobilisée": { + "account_number": "72", + "account_type": "Income Account" + }, + "Cotisations, dons, legs et subsides": { + "Cotisations": { + "account_number": "730", + "account_type": "Income Account" + }, + "Dons": { + "account_number": "731", + "account_type": "Income Account" + }, + "Legs": { + "account_number": "732", + "account_type": "Income Account" + }, + "Subsides": { + "account_number": "733", + "account_type": "Income Account" + }, + "account_number": "73", + "account_type": "Income Account" + }, + "Autres produits d'exploitation": { + "Plus-values sur réalisations courantes d'immobilisations corporelles": { + "account_number": "741", + "account_type": "Income Account" + }, + "Plus-values sur réalisation de créances commerciales": { + "account_number": "742", + "account_type": "Income Account" + }, + "Produits d'exploitation divers (743 à 749)": { + "account_number": "743", + "account_type": "Income Account" + }, + "account_number": "74", + "account_type": "Income Account" + }, + "Produits financiers": { + "Produits des immobilisations financières": { + "account_number": "750", + "account_type": "Income Account" + }, + "Produits des actifs circulants": { + "account_number": "751", + "account_type": "Income Account" + }, + "Plus-values sur la réalisation d'actifs circulants": { + "account_number": "752", + "account_type": "Income Account" + }, + "Différences de change": { + "account_number": "754", + "account_type": "Income Account" + }, + "Écarts de conversion des devises": { + "account_number": "755", + "account_type": "Income Account" + }, + "Produits financiers divers (756 à 759)": { + "account_number": "756", + "account_type": "Income Account" + }, + "account_number": "75", + "account_type": "Income Account" + }, + "Produits d'exploitation ou financiers non récurrents": { + "Reprise d'amortissements et réductions de valeur": { + "sur immobilisations incorporelles": { + "account_number": "7600", + "account_type": "Income Account" + }, + "sur immobilisations corporelles": { + "account_number": "7601", + "account_type": "Income Account" + }, + "account_number": "760", + "account_type": "Income Account" + }, + "Reprises de réductions de valeur sur immobilisations financières": { + "account_number": "761", + "account_type": "Income Account" + }, + "Reprises de provisions pour risques et charges non récurrents": { + "Reprises de provisions pour risques et charges d'exploitation non récurrents": { + "account_number": "7620", + "account_type": "Income Account" + }, + "Reprises de provisions pour risques et charges financiers non récurrents": { + "account_number": "7621", + "account_type": "Income Account" + }, + "account_number": "762", + "account_type": "Income Account" + }, + "Plus-values sur réalisation d'actifs immobilisés": { + "Plus-values sur réalisation d'immobilisations incorporelles et corporelles": { + "account_number": "7630", + "account_type": "Income Account" + }, + "Plus-values sur réalisation d'immobilisations financières": { + "account_number": "7631", + "account_type": "Income Account" + }, + "account_number": "763", + "account_type": "Income Account" + }, + "Autres produits d'exploitation non récurrents (764 à 768)": { + "account_number": "764", + "account_type": "Income Account" + }, + "Autres produits financiers non récurrents": { + "account_number": "769", + "account_type": "Income Account" + }, + "account_number": "76", + "account_type": "Income Account" + }, + "Régularisation d'impôts": { + "account_number": "77", + "account_type": "Income Account" + }, + "Prélèvements sur les réserves immunisées et les impôts différés": { + "Prélèvements sur les impôts différés": { + "account_number": "780", + "account_type": "Income Account" + }, + "Prélèvement sur les réserves immunisées": { + "account_number": "789", + "account_type": "Income Account" + }, + "account_number": "78", + "account_type": "Income Account" + }, + "Affectations et prélèvements": { + "Résultat positif de l'exercice antérieur reporté": { + "account_number": "790", + "account_type": "Income Account" + }, + "Autres réserves": { + "account_number": "791", + "account_type": "Income Account" + }, + "Résultat négatif à reporter": { + "account_number": "792", + "account_type": "Income Account" + }, + "account_number": "79", + "account_type": "Income Account" + } + } + } +} \ No newline at end of file diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_plan_comptable_minimum_normalise_entreprises.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_plan_comptable_minimum_normalise_entreprises.json new file mode 100644 index 00000000000..2deb46f7300 --- /dev/null +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/be_plan_comptable_minimum_normalise_entreprises.json @@ -0,0 +1,1597 @@ +{ + "country_code": "be", + "name": "Belgique - Plan comptable minimum normalisé (PCMN) des entreprises", + "tree": { + "CLASSE 1 : CAPITAUX PROPRES": { + "root_type": "Equity", + "Capital": { + "Capital souscrit": { + "account_number": "100", + "account_type": "Equity" + }, + "Capital non appelé (-)": { + "account_number": "101", + "account_type": "Equity" + }, + "account_number": "10", + "account_type": "Equity" + }, + "Apport hors capital": { + "Apport disponible hors capital": { + "Prime d'émission": { + "account_number": "1100", + "account_type": "Equity" + }, + "Autres": { + "account_number": "1109", + "account_type": "Equity" + }, + "account_number": "110", + "account_type": "Equity" + }, + "Apport indisponible hors capital": { + "Prime d'émission": { + "account_number": "1110", + "account_type": "Equity" + }, + "Autres": { + "account_number": "1119", + "account_type": "Equity" + }, + "account_number": "111", + "account_type": "Equity" + }, + "account_number": "11", + "account_type": "Equity" + }, + "Plus-values de réévaluation": { + "Plus-values de réévaluation sur immobilisations incorporelles": { + "account_number": "120", + "account_type": "Equity" + }, + "Plus-values de réévaluation sur immobilisations corporelles": { + "account_number": "121", + "account_type": "Equity" + }, + "Plus-values de réévaluation sur immobilisations financières": { + "account_number": "122", + "account_type": "Equity" + }, + "Plus-values de réévaluation sur stocks": { + "account_number": "123", + "account_type": "Equity" + }, + "Reprises de réductions de valeur sur placements de trésorerie": { + "account_number": "124", + "account_type": "Equity" + }, + "account_number": "12", + "account_type": "Equity" + }, + "Réserves": { + "Réserves légales": { + "account_number": "130", + "account_type": "Equity" + }, + "Autres réserves indisponibles": { + "Réserves statutairement indisponibles": { + "account_number": "1311", + "account_type": "Equity" + }, + "Réserve pour actions propres": { + "account_number": "1312", + "account_type": "Equity" + }, + "Soutien financier": { + "account_number": "1313", + "account_type": "Equity" + }, + "Autres": { + "account_number": "1319", + "account_type": "Equity" + }, + "account_number": "131", + "account_type": "Equity" + }, + "Réserves immunisées": { + "account_number": "132", + "account_type": "Equity" + }, + "Réserves disponibles": { + "account_number": "133", + "account_type": "Equity" + }, + "account_number": "13", + "account_type": "Equity" + }, + "Bénéfice reporté ou perte reportée (-)": { + "account_number": "14", + "account_type": "Equity" + }, + "Subsides en capital": { + "account_number": "15", + "account_type": "Equity" + } + }, + "CLASSE 1 : PROVISIONS ET DETTES À PLUS D'UN AN": { + "root_type": "Liability", + "Provisions et impôts différés": { + "Provisions pour pensions et obligations similaires": { + "account_number": "160", + "account_type": "Liability" + }, + "Provisions pour charges fiscales": { + "account_number": "161", + "account_type": "Liability" + }, + "Provisions pour grosses réparations et gros entretien": { + "account_number": "162", + "account_type": "Liability" + }, + "Provisions pour obligations environnementales": { + "account_number": "163", + "account_type": "Liability" + }, + "Impôts différés": { + "Impôts différés afférents à des subsides en capital": { + "account_number": "1680", + "account_type": "Liability" + }, + "Impôts différés afférents à des plus-values réalisées sur immobilisations incorporelles": { + "account_number": "1681", + "account_type": "Liability" + }, + "Impôts différés afférents à des plus-values réalisées sur immobilisations corporelles": { + "account_number": "1682", + "account_type": "Liability" + }, + "Impôts différés afférents à des plus-values réalisées sur titres émis par le secteur public belge": { + "account_number": "1687", + "account_type": "Liability" + }, + "Impôts différés étrangers": { + "account_number": "1688", + "account_type": "Liability" + }, + "account_number": "168", + "account_type": "Liability" + }, + "account_number": "16", + "account_type": "Liability" + }, + "Dettes à plus d'un an": { + "Emprunts subordonnés": { + "Convertibles": { + "account_number": "1700", + "account_type": "Liability" + }, + "Non convertibles": { + "account_number": "1701", + "account_type": "Liability" + }, + "account_number": "170", + "account_type": "Liability" + }, + "Emprunts obligataires non subordonnés": { + "Convertibles": { + "account_number": "1710", + "account_type": "Liability" + }, + "Non convertibles": { + "account_number": "1711", + "account_type": "Liability" + }, + "account_number": "171", + "account_type": "Liability" + }, + "Dettes de location-financement et assimilées": { + "account_number": "172", + "account_type": "Liability" + }, + "Établissements de crédit": { + "Dettes en compte": { + "account_number": "1730", + "account_type": "Liability" + }, + "Promesses": { + "account_number": "1731", + "account_type": "Liability" + }, + "Crédits d'acceptation": { + "account_number": "1732", + "account_type": "Liability" + }, + "account_number": "173", + "account_type": "Liability" + }, + "Autres emprunts": { + "account_number": "174", + "account_type": "Liability" + }, + "Dettes commerciales": { + "Fournisseurs": { + "account_number": "1750", + "account_type": "Liability" + }, + "Effets à payer": { + "account_number": "1751", + "account_type": "Liability" + }, + "account_number": "175", + "account_type": "Liability" + }, + "Acomptes sur commandes": { + "account_number": "176", + "account_type": "Liability" + }, + "Cautionnements reçus en numéraire": { + "account_number": "178", + "account_type": "Liability" + }, + "Dettes diverses": { + "account_number": "179", + "account_type": "Liability" + }, + "account_number": "17", + "account_type": "Liability" + }, + "Acompte aux associés sur le partage de l'actif net (-)": { + "account_number": "19", + "account_type": "Liability" + } + }, + "CLASSE 2 : FRAIS D'ÉTABLISSEMENT, ACTIFS IMMOBILISÉS ET CRÉANCES À PLUS D'UN AN": { + "root_type": "Asset", + "Frais d'établissement": { + "Frais de constitution, d'augmentation de capital ou d'augmentation de l'apport": { + "account_number": "200", + "account_type": "Fixed Asset" + }, + "Frais d'émission d'emprunts": { + "account_number": "201", + "account_type": "Fixed Asset" + }, + "Autres frais d'établissement": { + "account_number": "202", + "account_type": "Fixed Asset" + }, + "Frais de restructuration": { + "account_number": "204", + "account_type": "Fixed Asset" + }, + "account_number": "20", + "account_type": "Fixed Asset" + }, + "Immobilisations incorporelles": { + "Frais de recherche et de développement": { + "account_number": "210", + "account_type": "Fixed Asset" + }, + "Concessions, brevets, licences, savoir-faire, marques et droits similaires": { + "account_number": "211", + "account_type": "Fixed Asset" + }, + "Goodwill": { + "account_number": "212", + "account_type": "Fixed Asset" + }, + "Acomptes versés": { + "account_number": "213", + "account_type": "Fixed Asset" + }, + "Amortissements et réductions de valeur actées (-)": { + "account_number": "219", + "account_type": "Accumulated Depreciation" + }, + "account_number": "21", + "account_type": "Fixed Asset" + }, + "Terrains et constructions": { + "Terrains": { + "account_number": "220", + "account_type": "Fixed Asset" + }, + "Constructions": { + "account_number": "221", + "account_type": "Fixed Asset" + }, + "Terrains bâtis": { + "account_number": "222", + "account_type": "Fixed Asset" + }, + "Autres droits réels sur des immeubles": { + "account_number": "223", + "account_type": "Fixed Asset" + }, + "Amortissements et réductions de valeur actées (-)": { + "account_number": "229", + "account_type": "Accumulated Depreciation" + }, + "account_number": "22", + "account_type": "Fixed Asset" + }, + "Installations, machines et outillage": { + "account_number": "23", + "account_type": "Fixed Asset" + }, + "Mobilier et matériel roulant": { + "account_number": "24", + "account_type": "Fixed Asset" + }, + "Immobilisations détenues en location-financement et droits similaires": { + "Terrains et constructions": { + "account_number": "250", + "account_type": "Fixed Asset" + }, + "Installations, machines et outillage": { + "account_number": "251", + "account_type": "Fixed Asset" + }, + "Mobilier et matériel roulant": { + "account_number": "252", + "account_type": "Fixed Asset" + }, + "Amortissements et réductions de valeur actées (-)": { + "account_number": "259", + "account_type": "Accumulated Depreciation" + }, + "account_number": "25", + "account_type": "Fixed Asset" + }, + "Autres immobilisations corporelles": { + "account_number": "26", + "account_type": "Fixed Asset" + }, + "Immobilisations corporelles en cours et acomptes versés": { + "account_number": "27", + "account_type": "Fixed Asset" + }, + "Immobilisations financières": { + "Participations dans des entreprises liées": { + "Valeur d'acquisition": { + "account_number": "2800", + "account_type": "Fixed Asset" + }, + "Montants non appelés (-)": { + "account_number": "2801", + "account_type": "Fixed Asset" + }, + "Plus-values actées": { + "account_number": "2808", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2809", + "account_type": "Fixed Asset" + }, + "account_number": "280", + "account_type": "Fixed Asset" + }, + "Créances sur des entreprises liées": { + "Créances en compte": { + "account_number": "2810", + "account_type": "Fixed Asset" + }, + "Effets à recevoir": { + "account_number": "2811", + "account_type": "Fixed Asset" + }, + "Titres à revenu fixe": { + "account_number": "2812", + "account_type": "Fixed Asset" + }, + "Créances douteuses": { + "account_number": "2817", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2819", + "account_type": "Fixed Asset" + }, + "account_number": "281", + "account_type": "Fixed Asset" + }, + "Participations dans des entreprises avec lesquelles il existe un lien de participation": { + "Valeur d'acquisition": { + "account_number": "2820", + "account_type": "Fixed Asset" + }, + "Montants non appelés (-)": { + "account_number": "2821", + "account_type": "Fixed Asset" + }, + "Plus-values actées": { + "account_number": "2828", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2829", + "account_type": "Fixed Asset" + }, + "account_number": "282", + "account_type": "Fixed Asset" + }, + "Créances sur des entreprises avec lesquelles il existe un lien de participation": { + "Créances en compte": { + "account_number": "2830", + "account_type": "Fixed Asset" + }, + "Effets à recevoir": { + "account_number": "2831", + "account_type": "Fixed Asset" + }, + "Titres à revenu fixe": { + "account_number": "2832", + "account_type": "Fixed Asset" + }, + "Créances douteuses": { + "account_number": "2837", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2839", + "account_type": "Fixed Asset" + }, + "account_number": "283", + "account_type": "Fixed Asset" + }, + "Autres actions et parts": { + "Valeur d'acquisition": { + "account_number": "2840", + "account_type": "Fixed Asset" + }, + "Montants non appelés (-)": { + "account_number": "2841", + "account_type": "Fixed Asset" + }, + "Plus-values actées": { + "account_number": "2848", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2849", + "account_type": "Fixed Asset" + }, + "account_number": "284", + "account_type": "Fixed Asset" + }, + "Autres créances": { + "Créances en compte": { + "account_number": "2850", + "account_type": "Fixed Asset" + }, + "Effets à recevoir": { + "account_number": "2851", + "account_type": "Fixed Asset" + }, + "Titres à revenu fixe": { + "account_number": "2852", + "account_type": "Fixed Asset" + }, + "Créances douteuses": { + "account_number": "2857", + "account_type": "Fixed Asset" + }, + "Réductions de valeur actées (-)": { + "account_number": "2859", + "account_type": "Fixed Asset" + }, + "account_number": "285", + "account_type": "Fixed Asset" + }, + "Cautionnements versés en numéraire": { + "account_number": "288", + "account_type": "Fixed Asset" + }, + "account_number": "28", + "account_type": "Fixed Asset" + }, + "Créances à plus d'un an": { + "Créances commerciales": { + "Clients": { + "account_number": "2900" + }, + "Effets à recevoir": { + "account_number": "2901" + }, + "Acomptes versés": { + "account_number": "2906" + }, + "Créances douteuses": { + "account_number": "2907" + }, + "Réductions de valeur actées (-)": { + "account_number": "2909" + }, + "account_number": "290" + }, + "Autres créances": { + "Créances en compte": { + "account_number": "2910" + }, + "Effets à recevoir": { + "account_number": "2911" + }, + "Créances douteuses": { + "account_number": "2917" + }, + "Réductions de valeur actées (-)": { + "account_number": "2919" + }, + "account_number": "291" + }, + "account_number": "29" + } + }, + "CLASSE 3 : STOCKS ET COMMANDES EN COURS D'EXÉCUTION": { + "root_type": "Asset", + "Matières premières": { + "Valeur d'acquisition": { + "account_number": "300" + }, + "Réductions de valeur actées (-)": { + "account_number": "309" + }, + "account_number": "30" + }, + "Approvisionnements et fournitures": { + "Valeur d'acquisition": { + "account_number": "310" + }, + "Réductions de valeur actées (-)": { + "account_number": "319" + }, + "account_number": "31" + }, + "En-cours de fabrication": { + "Valeur d'acquisition": { + "account_number": "320" + }, + "Réductions de valeur actées (-)": { + "account_number": "329" + }, + "account_number": "32" + }, + "Produits finis": { + "Valeur d'acquisition": { + "account_number": "330" + }, + "Réductions de valeur actées (-)": { + "account_number": "339" + }, + "account_number": "33" + }, + "Marchandises": { + "Valeur d'acquisition": { + "account_number": "340", + "account_type": "Stock" + }, + "Réductions de valeur actées (-)": { + "account_number": "349" + }, + "account_number": "34", + "account_type": "Stock" + }, + "Immeubles destinés à la vente": { + "Valeur d'acquisition": { + "account_number": "350" + }, + "Réductions de valeur actées (-)": { + "account_number": "359" + }, + "account_number": "35" + }, + "Acomptes versés sur achats pour stocks": { + "Acomptes versés": { + "account_number": "360" + }, + "Réductions de valeur actées (-)": { + "account_number": "369" + }, + "account_number": "36" + }, + "Commandes en cours d'exécution": { + "Valeur d'acquisition": { + "account_number": "370" + }, + "Bénéfice pris en compte": { + "account_number": "371" + }, + "Réductions de valeur actées (-)": { + "account_number": "379" + }, + "account_number": "37" + }, + "Stock livré non facturé": { + "account_type": "Stock Delivered But Not Billed" + } + }, + "CLASSE 4 : CRÉANCES À UN AN AU PLUS": { + "root_type": "Asset", + "Créances commerciales": { + "Clients": { + "account_number": "400", + "account_type": "Receivable" + }, + "Effets à recevoir": { + "account_number": "401", + "account_type": "Receivable" + }, + "Produits à recevoir": { + "account_number": "404", + "account_type": "Receivable" + }, + "Acomptes versés": { + "account_number": "406" + }, + "Créances douteuses": { + "account_number": "407", + "account_type": "Receivable" + }, + "Réductions de valeur actées (-)": { + "account_number": "409" + }, + "account_number": "40", + "account_type": "Receivable" + }, + "Autres créances": { + "Capital ou apport appelé, non versé": { + "account_number": "410" + }, + "TVA à récupérer": { + "account_number": "411", + "account_type": "Tax" + }, + "Impôts et précomptes à récupérer": { + "Impôts et taxes étrangers": { + "account_number": "4128" + }, + "account_number": "412" + }, + "Produits à recevoir": { + "account_number": "414" + }, + "Créances diverses": { + "account_number": "416" + }, + "Créances douteuses": { + "account_number": "417" + }, + "Cautionnements versés en numéraire": { + "account_number": "418" + }, + "Réductions de valeur actées (-)": { + "account_number": "419" + }, + "account_number": "41" + } + }, + "CLASSE 4 : DETTES À UN AN AU PLUS": { + "root_type": "Liability", + "Dettes à plus d'un an échéant dans l'année (16) (même subdivision que le compte 17)": { + "account_number": "42" + }, + "Dettes financières": { + "Établissements de crédit - Emprunts en compte à terme fixe": { + "account_number": "430" + }, + "Établissements de crédit - Promesses": { + "account_number": "431" + }, + "Établissements de crédit - Crédits d'acceptation": { + "account_number": "432" + }, + "Établissements de crédit - Dettes en compte courant": { + "account_number": "433" + }, + "Autres emprunts": { + "account_number": "439" + }, + "account_number": "43" + }, + "Dettes commerciales": { + "Fournisseurs": { + "account_number": "440", + "account_type": "Payable" + }, + "Effets à payer": { + "account_number": "441", + "account_type": "Payable" + }, + "Factures à recevoir": { + "account_number": "444", + "account_type": "Stock Received But Not Billed" + }, + "account_number": "44", + "account_type": "Payable" + }, + "Dettes fiscales, salariales et sociales": { + "Dettes fiscales estimées": { + "Impôts et taxes étrangers": { + "account_number": "4508" + }, + "account_number": "450" + }, + "TVA à payer": { + "account_number": "451", + "account_type": "Tax" + }, + "Impôts et taxes à payer": { + "Impôts et taxes étrangers": { + "account_number": "4528" + }, + "account_number": "452" + }, + "Précomptes retenus": { + "account_number": "453" + }, + "Office national de la Sécurité sociale": { + "account_number": "454" + }, + "Rémunérations": { + "account_number": "455" + }, + "Pécules de vacances": { + "account_number": "456" + }, + "Autres dettes sociales": { + "account_number": "459" + }, + "account_number": "45" + }, + "Acomptes sur commandes": { + "account_number": "46" + }, + "Dettes découlant de l'affectation du résultat": { + "Dividendes et tantièmes d'exercices antérieurs": { + "account_number": "470" + }, + "Dividendes de l'exercice": { + "account_number": "471" + }, + "Tantièmes de l'exercice": { + "account_number": "472" + }, + "Autres allocataires": { + "account_number": "473" + }, + "account_number": "47" + }, + "Dettes diverses": { + "Obligations et coupons échus": { + "account_number": "480" + }, + "Cautionnements reçus en numéraire": { + "account_number": "488" + }, + "Autres dettes diverses": { + "account_number": "489" + }, + "account_number": "48" + }, + "Comptes de régularisation et d'attente": { + "Charges à reporter": { + "account_number": "490" + }, + "Produits acquis": { + "account_number": "491" + }, + "Charges à imputer": { + "account_number": "492" + }, + "Produits à reporter": { + "account_number": "493" + }, + "Comptes d'attente": { + "account_number": "499" + }, + "account_number": "49" + } + }, + "CLASSE 5 : PLACEMENTS DE TRÉSORERIE ET VALEURS DISPONIBLES": { + "root_type": "Asset", + "Actions propres": { + "account_number": "50" + }, + "Actions, parts et placements de trésorerie autres que placements à revenu fixe": { + "Valeur d'acquisition": { + "Actions et parts": { + "account_number": "5100" + }, + "Placements de trésorerie autres que placements à revenu fixe": { + "account_number": "5101" + }, + "account_number": "510" + }, + "Montants non appelés (-)": { + "Actions et parts": { + "account_number": "5110" + }, + "account_number": "511" + }, + "Réductions de valeur actées (-)": { + "Actions et parts": { + "account_number": "5190" + }, + "Placements de trésorerie autres que placements à revenu fixe": { + "account_number": "5191" + }, + "account_number": "519" + }, + "account_number": "51" + }, + "Titres à revenu fixe": { + "Valeur d'acquisition": { + "account_number": "520" + }, + "Réductions de valeur actées (-)": { + "account_number": "529" + }, + "account_number": "52" + }, + "Dépôts à terme": { + "De plus d'un an": { + "account_number": "530" + }, + "De plus d'un mois et à un an au plus": { + "account_number": "531" + }, + "D'un mois au plus": { + "account_number": "532" + }, + "Réductions de valeur actées (-)": { + "account_number": "539" + }, + "account_number": "53" + }, + "Valeurs échues à l'encaissement": { + "account_number": "54" + }, + "Établissements de crédit": { + "Banque": { + "account_number": "5500", + "account_type": "Bank" + }, + "account_number": "55", + "account_type": "Bank" + }, + "Caisses": { + "Caisses-timbres": { + "account_number": "578", + "account_type": "Cash" + }, + "account_number": "57", + "account_type": "Cash" + }, + "Virements internes": { + "account_number": "58", + "account_type": "Temporary" + } + }, + "CLASSE 6 : CHARGES": { + "root_type": "Expense", + "Approvisionnements et marchandises": { + "Achats de matières premières": { + "account_number": "600", + "account_type": "Expense Account" + }, + "Achats de fournitures": { + "account_number": "601", + "account_type": "Expense Account" + }, + "Achats de services, travaux et études": { + "account_number": "602", + "account_type": "Expense Account" + }, + "Sous-traitances générales": { + "account_number": "603", + "account_type": "Expense Account" + }, + "Achats de marchandises": { + "account_number": "604", + "account_type": "Cost of Goods Sold" + }, + "Achats d'immeubles destinés à la vente": { + "account_number": "605", + "account_type": "Expense Account" + }, + "Remises, ristournes et rabais (-)": { + "account_number": "608", + "account_type": "Expense Account" + }, + "Variations des stocks": { + "de matières premières": { + "account_number": "6090", + "account_type": "Stock Adjustment" + }, + "de fournitures": { + "account_number": "6091", + "account_type": "Stock Adjustment" + }, + "de marchandises": { + "account_number": "6094", + "account_type": "Stock Adjustment" + }, + "d'immeubles achetés destinés à la vente": { + "account_number": "6095", + "account_type": "Stock Adjustment" + }, + "account_number": "609", + "account_type": "Stock Adjustment" + }, + "account_number": "60", + "account_type": "Expense Account" + }, + "Services et biens divers": { + "Personnel intérimaire et personnes mises à la disposition de l'entreprise": { + "account_number": "617", + "account_type": "Expense Account" + }, + "Rémunérations et pensions des administrateurs, gérants et associés actifs, hors contrat de travail": { + "account_number": "618", + "account_type": "Expense Account" + }, + "Frais accessoires d'achat inclus dans la valeur des stocks": { + "account_type": "Expenses Included In Valuation" + }, + "account_number": "61", + "account_type": "Expense Account" + }, + "Rémunérations, charges sociales et pensions": { + "Rémunérations et avantages sociaux directs": { + "Administrateurs ou gérants": { + "account_number": "6200", + "account_type": "Expense Account" + }, + "Personnel de direction": { + "account_number": "6201", + "account_type": "Expense Account" + }, + "Employés": { + "account_number": "6202", + "account_type": "Expense Account" + }, + "Ouvriers": { + "account_number": "6203", + "account_type": "Expense Account" + }, + "Autres membres du personnel": { + "account_number": "6204", + "account_type": "Expense Account" + }, + "account_number": "620", + "account_type": "Expense Account" + }, + "Cotisations patronales pour assurances sociales": { + "account_number": "621", + "account_type": "Expense Account" + }, + "Primes patronales pour assurances extra-légales": { + "account_number": "622", + "account_type": "Expense Account" + }, + "Autres frais du personnel": { + "account_number": "623", + "account_type": "Expense Account" + }, + "Pensions de retraite et de survie": { + "Administrateurs ou gérants": { + "account_number": "6240", + "account_type": "Expense Account" + }, + "Personnel": { + "account_number": "6241", + "account_type": "Expense Account" + }, + "account_number": "624", + "account_type": "Expense Account" + }, + "account_number": "62", + "account_type": "Expense Account" + }, + "Amortissements, réductions de valeur et provisions pour risques": { + "Dotations aux amortissements et aux réductions de valeur sur immobilisations": { + "Dotations aux amortissements sur frais d'établissement": { + "account_number": "6300", + "account_type": "Depreciation" + }, + "Dotation aux amortissements sur immobilisations incorporelles": { + "account_number": "6301", + "account_type": "Depreciation" + }, + "Dotation aux amortissements sur immobilisations corporelles": { + "account_number": "6302", + "account_type": "Depreciation" + }, + "Dotation aux réductions de valeur sur immobilisations incorporelles": { + "account_number": "6308", + "account_type": "Depreciation" + }, + "Dotation aux réductions de valeur sur immobilisations corporelles": { + "account_number": "6309", + "account_type": "Depreciation" + }, + "account_number": "630", + "account_type": "Depreciation" + }, + "Réductions de valeur sur stocks": { + "Dotations": { + "account_number": "6310", + "account_type": "Depreciation" + }, + "Reprises (-)": { + "account_number": "6311", + "account_type": "Depreciation" + }, + "account_number": "631", + "account_type": "Depreciation" + }, + "Réductions de valeur sur commandes en cours d'exécution": { + "Dotations": { + "account_number": "6320", + "account_type": "Depreciation" + }, + "Reprises (-)": { + "account_number": "6321", + "account_type": "Depreciation" + }, + "account_number": "632", + "account_type": "Depreciation" + }, + "Réductions de valeur sur créances commerciales à plus d'un an": { + "Dotations": { + "account_number": "6330", + "account_type": "Depreciation" + }, + "Reprises (-)": { + "account_number": "6331", + "account_type": "Depreciation" + }, + "account_number": "633", + "account_type": "Depreciation" + }, + "Réductions de valeur sur créances à un an au plus": { + "Dotations": { + "account_number": "6340", + "account_type": "Depreciation" + }, + "Reprises (-)": { + "account_number": "6341", + "account_type": "Depreciation" + }, + "account_number": "634", + "account_type": "Depreciation" + }, + "Provisions pour pensions et obligations similaires": { + "Dotations": { + "account_number": "6350", + "account_type": "Depreciation" + }, + "Utilisations et reprises (-)": { + "account_number": "6351", + "account_type": "Depreciation" + }, + "account_number": "635", + "account_type": "Depreciation" + }, + "Provisions pour grosses réparations et gros entretien": { + "Dotations": { + "account_number": "6360", + "account_type": "Depreciation" + }, + "Utilisations et reprises (-)": { + "account_number": "6361", + "account_type": "Depreciation" + }, + "account_number": "636", + "account_type": "Depreciation" + }, + "Provisions pour obligations environnementales": { + "Dotations": { + "account_number": "6370", + "account_type": "Depreciation" + }, + "Utilisations et reprises (-)": { + "account_number": "6371", + "account_type": "Depreciation" + }, + "account_number": "637", + "account_type": "Depreciation" + }, + "Provisions pour autres risques et charges": { + "Dotations": { + "account_number": "6380", + "account_type": "Expense Account" + }, + "Utilisations et reprises (-)": { + "account_number": "6381", + "account_type": "Expense Account" + }, + "account_number": "638", + "account_type": "Expense Account" + }, + "account_number": "63", + "account_type": "Expense Account" + }, + "Autres charges d'exploitation": { + "Charges fiscales d'exploitation": { + "account_number": "640", + "account_type": "Expense Account" + }, + "Moins-values sur réalisations courantes d'immobilisations corporelles": { + "account_number": "641", + "account_type": "Expense Account" + }, + "Moins-values sur réalisations de créances commerciales": { + "account_number": "642", + "account_type": "Expense Account" + }, + "Charges d'exploitations diverses (643 à 648)": { + "account_number": "643", + "account_type": "Expense Account" + }, + "Charges d'exploitation portées à l'actif au titre de frais de restructuration (-)": { + "account_number": "649", + "account_type": "Expense Account" + }, + "account_number": "64", + "account_type": "Expense Account" + }, + "Charges financières": { + "Charges des dettes": { + "Intérêts, commissions et frais afférents aux dettes": { + "account_number": "6500", + "account_type": "Expense Account" + }, + "Amortissements des frais d'émission d'emprunts": { + "account_number": "6501", + "account_type": "Expense Account" + }, + "Intérêts intercalaires portés à l'actif (-)": { + "account_number": "6502", + "account_type": "Expense Account" + }, + "account_number": "650", + "account_type": "Expense Account" + }, + "Réductions de valeur sur actifs circulants": { + "Dotations": { + "account_number": "6510", + "account_type": "Expense Account" + }, + "Reprises (-)": { + "account_number": "6511", + "account_type": "Expense Account" + }, + "account_number": "651", + "account_type": "Expense Account" + }, + "Moins-values sur réalisation d'actifs circulants": { + "account_number": "652", + "account_type": "Expense Account" + }, + "Charges d'escompte de créances": { + "account_number": "653", + "account_type": "Expense Account" + }, + "Différences de change": { + "account_number": "654", + "account_type": "Expense Account" + }, + "Écarts de conversion des devises": { + "account_number": "655", + "account_type": "Expense Account" + }, + "Provisions à caractère financier": { + "Dotations": { + "account_number": "6560", + "account_type": "Expense Account" + }, + "Utilisations et reprises (-)": { + "account_number": "6561", + "account_type": "Expense Account" + }, + "account_number": "656", + "account_type": "Expense Account" + }, + "Charges financières diverses (657 à 658)": { + "account_number": "657", + "account_type": "Expense Account" + }, + "Charges financières portées à l'actif au titre de frais de restructuration (-)": { + "account_number": "659", + "account_type": "Expense Account" + }, + "account_number": "65", + "account_type": "Expense Account" + }, + "Charges d'exploitation et charges financières non récurrentes": { + "Amortissements et réductions de valeur non récurrents (dotations)": { + "sur frais d'établissement": { + "account_number": "6600", + "account_type": "Expense Account" + }, + "sur immobilisations incorporelles": { + "account_number": "6601", + "account_type": "Expense Account" + }, + "sur immobilisations corporelles": { + "account_number": "6602", + "account_type": "Expense Account" + }, + "account_number": "660", + "account_type": "Expense Account" + }, + "Réduction de valeur sur immobilisations financières (dotation)": { + "account_number": "661", + "account_type": "Expense Account" + }, + "Provisions pour risques et charges non récurrents": { + "Provisions pour risques et charges d'exploitation non récurrents": { + "Dotations": { + "account_number": "66200", + "account_type": "Expense Account" + }, + "Utilisations (-)": { + "account_number": "66201", + "account_type": "Expense Account" + }, + "account_number": "6620", + "account_type": "Expense Account" + }, + "Provisions pour risques et charges financiers non récurrents": { + "Dotations": { + "account_number": "66210", + "account_type": "Expense Account" + }, + "Utilisations (-)": { + "account_number": "66211", + "account_type": "Expense Account" + }, + "account_number": "6621", + "account_type": "Expense Account" + }, + "account_number": "662", + "account_type": "Expense Account" + }, + "Moins-values sur réalisation d'actifs immobilisés": { + "Moins-values sur réalisation d'immobilisations incorporelles et corporelles": { + "account_number": "6630", + "account_type": "Expense Account" + }, + "Moins-values sur réalisation d'immobilisations financières": { + "account_number": "6631", + "account_type": "Expense Account" + }, + "account_number": "663", + "account_type": "Expense Account" + }, + "Autres charges d'exploitation non récurrentes (664 à 667)": { + "account_number": "664", + "account_type": "Expense Account" + }, + "Autres charges financières non récurrentes": { + "account_number": "668", + "account_type": "Expense Account" + }, + "Charges d'exploitation non récurrentes portées à l'actif au titre de frais de restructuration (-)": { + "account_number": "6690", + "account_type": "Expense Account" + }, + "Charges financières non récurrentes portées à l'actif au titre de frais de restructuration (-)": { + "account_number": "6691", + "account_type": "Expense Account" + }, + "account_number": "66", + "account_type": "Expense Account" + }, + "Impôts sur le résultat": { + "Impôts belges sur le résultat de l'exercice": { + "Impôts et précomptes dus ou versés": { + "account_number": "6700", + "account_type": "Expense Account" + }, + "Excédent de versements d'impôts et de précomptes porté à l'actif (-)": { + "account_number": "6701", + "account_type": "Expense Account" + }, + "Charges fiscales estimées": { + "account_number": "6702", + "account_type": "Expense Account" + }, + "account_number": "670", + "account_type": "Expense Account" + }, + "Impôts belges sur le résultat d'exercices antérieurs": { + "Suppléments d'impôts dus ou versés": { + "account_number": "6710", + "account_type": "Expense Account" + }, + "Suppléments d'impôts estimés": { + "account_number": "6711", + "account_type": "Expense Account" + }, + "Provisions fiscales constituées": { + "account_number": "6712", + "account_type": "Expense Account" + }, + "account_number": "671", + "account_type": "Expense Account" + }, + "Impôts étrangers sur le résultat de l'exercice": { + "account_number": "672", + "account_type": "Expense Account" + }, + "Impôts étrangers sur le résultat d'exercices antérieurs": { + "account_number": "673", + "account_type": "Expense Account" + }, + "account_number": "67", + "account_type": "Expense Account" + }, + "Transferts aux impôts différés et aux réserves immunisées": { + "Transferts aux impôts différés": { + "account_number": "680", + "account_type": "Expense Account" + }, + "Transferts aux réserves immunisées": { + "account_number": "689", + "account_type": "Expense Account" + }, + "account_number": "68", + "account_type": "Expense Account" + }, + "Affectations et prélèvements": { + "Perte reportée de l'exercice précédent": { + "account_number": "690", + "account_type": "Expense Account" + }, + "Affectations à l'apport": { + "account_number": "691", + "account_type": "Expense Account" + }, + "Dotation aux réserves": { + "Dotation à la réserve légale": { + "account_number": "6920", + "account_type": "Expense Account" + }, + "Dotation aux autres réserves": { + "account_number": "6921", + "account_type": "Expense Account" + }, + "account_number": "692", + "account_type": "Expense Account" + }, + "Bénéfices à reporter": { + "account_number": "693", + "account_type": "Expense Account" + }, + "Rémunération de l'apport": { + "account_number": "694", + "account_type": "Expense Account" + }, + "Administrateurs ou gérants": { + "account_number": "695", + "account_type": "Expense Account" + }, + "Employés": { + "account_number": "696", + "account_type": "Expense Account" + }, + "Autres applications": { + "account_number": "697", + "account_type": "Expense Account" + }, + "account_number": "69", + "account_type": "Expense Account" + } + }, + "CLASSE 7 : PRODUITS": { + "root_type": "Income", + "Chiffre d'affaires": { + "Remises, ristournes et rabais accordés (-)": { + "account_number": "708", + "account_type": "Income Account" + }, + "account_number": "70", + "account_type": "Income Account" + }, + "Variation des stocks et des commandes en cours d'exécution": { + "Des en-cours de fabrication": { + "account_number": "712", + "account_type": "Income Account" + }, + "Des produits finis": { + "account_number": "713", + "account_type": "Income Account" + }, + "Des immeubles construits destinés à la vente": { + "account_number": "715", + "account_type": "Income Account" + }, + "Des commandes en cours d'exécution": { + "Valeur d'acquisition": { + "account_number": "7170", + "account_type": "Income Account" + }, + "Bénéfice pris en compte": { + "account_number": "7171", + "account_type": "Income Account" + }, + "account_number": "717", + "account_type": "Income Account" + }, + "account_number": "71", + "account_type": "Income Account" + }, + "Production immobilisée": { + "account_number": "72", + "account_type": "Income Account" + }, + "Autres produits d'exploitation": { + "Subsides d'exploitation et montants compensatoires": { + "account_number": "740", + "account_type": "Income Account" + }, + "Plus-values sur réalisations courantes d'immobilisations corporelles": { + "account_number": "741", + "account_type": "Income Account" + }, + "Plus-values sur réalisation de créances commerciales": { + "account_number": "742", + "account_type": "Income Account" + }, + "Produits d'exploitation divers (743 à 749)": { + "account_number": "743", + "account_type": "Income Account" + }, + "account_number": "74", + "account_type": "Income Account" + }, + "Produits financiers": { + "Produits des immobilisations financières": { + "account_number": "750", + "account_type": "Income Account" + }, + "Produits des actifs circulants": { + "account_number": "751", + "account_type": "Income Account" + }, + "Plus-values sur réalisation d'actifs circulants": { + "account_number": "752", + "account_type": "Income Account" + }, + "Subsides en capital et en intérêts": { + "account_number": "753", + "account_type": "Income Account" + }, + "Différences de change": { + "account_number": "754", + "account_type": "Income Account" + }, + "Écarts de conversion des devises": { + "account_number": "755", + "account_type": "Income Account" + }, + "Produits financiers divers (756 à 759)": { + "account_number": "756", + "account_type": "Income Account" + }, + "account_number": "75", + "account_type": "Income Account" + }, + "Produits d'exploitation ou financiers non récurrents": { + "Reprises d'amortissements et de réductions de valeur": { + "sur immobilisations incorporelles": { + "account_number": "7600", + "account_type": "Income Account" + }, + "sur immobilisations corporelles": { + "account_number": "7601", + "account_type": "Income Account" + }, + "account_number": "760", + "account_type": "Income Account" + }, + "Reprises de réductions de valeur sur immobilisations financières": { + "account_number": "761", + "account_type": "Income Account" + }, + "Reprises de provisions pour risques et charges non récurrents": { + "Reprises de provisions pour risques et charges d'exploitation non récurrents": { + "account_number": "7620", + "account_type": "Income Account" + }, + "Reprises de provisions pour risques et charges financiers non récurrents": { + "account_number": "7621", + "account_type": "Income Account" + }, + "account_number": "762", + "account_type": "Income Account" + }, + "Plus-values sur réalisation d'actifs immobilisés": { + "Plus-values sur réalisation d'immobilisations incorporelles et corporelles": { + "account_number": "7630", + "account_type": "Income Account" + }, + "Plus-values sur réalisation d'immobilisations financières": { + "account_number": "7631", + "account_type": "Income Account" + }, + "account_number": "763", + "account_type": "Income Account" + }, + "Autres bénéfices d'exploitation non récurrents (764 à 768)": { + "account_number": "764", + "account_type": "Income Account" + }, + "Autres produits financiers non récurrents": { + "account_number": "769", + "account_type": "Income Account" + }, + "account_number": "76", + "account_type": "Income Account" + }, + "Régularisations d'impôts et reprises de provisions fiscales": { + "Impôts belges sur le résultat": { + "Régularisation d'impôts dus ou versés": { + "account_number": "7710", + "account_type": "Income Account" + }, + "Régularisation d'impôts estimés": { + "account_number": "7711", + "account_type": "Income Account" + }, + "Reprises de provisions fiscales": { + "account_number": "7712", + "account_type": "Income Account" + }, + "account_number": "771", + "account_type": "Income Account" + }, + "Impôts étrangers sur le résultat": { + "account_number": "773", + "account_type": "Income Account" + }, + "account_number": "77", + "account_type": "Income Account" + }, + "Prélèvements sur les réserves immunisées et les impôts différés": { + "Prélèvements sur les impôts différés": { + "account_number": "780", + "account_type": "Income Account" + }, + "Prélèvement sur les réserves immunisées": { + "account_number": "789", + "account_type": "Income Account" + }, + "account_number": "78", + "account_type": "Income Account" + }, + "Affectations et prélèvements": { + "Bénéfice reporté de l'exercice précédent": { + "account_number": "790", + "account_type": "Income Account" + }, + "Prélèvements sur l'apport": { + "account_number": "791", + "account_type": "Income Account" + }, + "Prélèvements sur les réserves": { + "account_number": "792", + "account_type": "Income Account" + }, + "Perte à reporter": { + "account_number": "793", + "account_type": "Income Account" + }, + "Intervention d'associés (ou du propriétaire) dans la perte": { + "account_number": "794", + "account_type": "Income Account" + }, + "account_number": "79", + "account_type": "Income Account" + } + } + } +} \ No newline at end of file diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index 3bc183151c0..93928e9b149 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -94,13 +94,14 @@ "column_break_25", "reports_tab", "remarks_section", - "general_ledger_remarks_length", - "receivable_payable_remarks_length", + "disable_include_dimensions", "column_break_lvjk", + "general_ledger_remarks_length", "accounts_receivable_payable_tuning_section", "receivable_payable_fetch_method", "default_ageing_range", "column_break_ntmi", + "receivable_payable_remarks_length", "legacy_section", "ignore_is_opening_check_for_reporting", "tab_break_dpet", @@ -198,10 +199,12 @@ }, { "default": "1", + "description": "System will use the latest saved Currency Exchange rate on or before the transaction date, however old it is.
\nUncheck to ignore rates older than Stale Days and fetch a fresh rate from the exchange rate provider instead.", "fieldname": "allow_stale", "fieldtype": "Check", "in_list_view": 1, - "label": "Allow Stale Exchange Rates" + "label": "Allow Stale Exchange Rates", + "show_description_on_click": 1 }, { "default": "1", @@ -277,10 +280,10 @@ }, { "default": "0", - "description": "Block a new Sales Invoice when the customer's overdue amount exceeds the Overdue Limit set on the customer.", + "description": "Enabling this option prevents the creation of a new Sales Invoice when the customer has an overdue limit set and their outstanding overdue amount exceeds that limit.", "fieldname": "enable_overdue_billing_threshold", "fieldtype": "Check", - "label": "Restrict Customer Over Billing" + "label": "Prevent Sales Invoice when Customer is Overdue" }, { "depends_on": "eval:doc.enable_overdue_billing_threshold", @@ -474,7 +477,7 @@ { "fieldname": "remarks_section", "fieldtype": "Section Break", - "label": "Remarks Column Length" + "label": "General Ledger Report" }, { "default": "0", @@ -548,7 +551,7 @@ { "fieldname": "accounts_receivable_payable_tuning_section", "fieldtype": "Section Break", - "label": "Accounts Receivable / Payable Tuning" + "label": "Accounts Receivable / Payable Report" }, { "fieldname": "legacy_section", @@ -780,6 +783,12 @@ "fieldname": "book_stock_expense_gl_entries", "fieldtype": "Check", "label": "Book Stock Expense GL Entries" + }, + { + "default": "0", + "fieldname": "disable_include_dimensions", + "fieldtype": "Check", + "label": "Disable \"Consider Accounting Dimension\" Filter" } ], "grid_page_length": 50, @@ -788,7 +797,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2026-07-27 12:00:00.000000", + "modified": "2026-08-14 15:26:49.070889", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Settings", diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py index 0497429e6d2..da653cb3c50 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py @@ -72,6 +72,7 @@ class AccountsSettings(Document): default_ageing_range: DF.Data | None delete_linked_ledger_entries: DF.Check determine_address_tax_category_from: DF.Literal["Billing Address", "Shipping Address"] + disable_include_dimensions: DF.Check enable_accounting_dimensions: DF.Check enable_common_party_accounting: DF.Check enable_discounts_and_margin: DF.Check diff --git a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py index f459481a496..cf173ad5aed 100644 --- a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py +++ b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py @@ -167,9 +167,10 @@ def get_transaction_reference(txn_data: dict) -> str: ).strip() -@frappe.whitelist() +@frappe.whitelist(methods=["POST"]) def convert_mt940_to_csv(data_import, mt940_file_path): doc = frappe.get_doc("Bank Statement Import", data_import) + doc.check_permission("write") _file_doc, content = get_file(mt940_file_path) @@ -234,26 +235,30 @@ def convert_mt940_to_csv(data_import, mt940_file_path): @frappe.whitelist() def get_preview_from_template(data_import, import_file=None, google_sheets_url=None): - return frappe.get_doc("Bank Statement Import", data_import).get_preview_from_template( - import_file, google_sheets_url - ) + bsi = frappe.get_doc("Bank Statement Import", data_import) + bsi.check_permission() + return bsi.get_preview_from_template(import_file, google_sheets_url) @frappe.whitelist() def form_start_import(data_import): - job_id = frappe.get_doc("Bank Statement Import", data_import).start_import() - return job_id is not None + bsi = frappe.get_doc("Bank Statement Import", data_import) + bsi.check_permission("write") + return bsi.start_import() @frappe.whitelist() def download_errored_template(data_import_name): data_import = frappe.get_doc("Bank Statement Import", data_import_name) + data_import.check_permission() data_import.export_errored_rows() @frappe.whitelist() def download_import_log(data_import_name): - return frappe.get_doc("Bank Statement Import", data_import_name).download_import_log() + bsi = frappe.get_doc("Bank Statement Import", data_import_name) + bsi.check_permission() + return bsi.download_import_log() def is_mt940_format(content: str) -> bool: @@ -392,6 +397,7 @@ def get_import_status(docname): import_status = {} data_import = frappe.get_doc("Bank Statement Import", docname) + data_import.check_permission() import_status["status"] = data_import.status logs = frappe.get_all( diff --git a/erpnext/accounts/doctype/dunning/dunning.py b/erpnext/accounts/doctype/dunning/dunning.py index 70cdb99ae1d..508294161a3 100644 --- a/erpnext/accounts/doctype/dunning/dunning.py +++ b/erpnext/accounts/doctype/dunning/dunning.py @@ -275,6 +275,7 @@ def get_linked_dunnings_as_per_state(sales_invoice, state): .join(overdue_payment) .on(overdue_payment.parent == dunning.name) .select(dunning.name) + .distinct() .where( (dunning.status == state) & (dunning.docstatus != 2) diff --git a/erpnext/accounts/doctype/dunning/test_dunning.py b/erpnext/accounts/doctype/dunning/test_dunning.py index 6eaf1d8798e..47cd0afe5d3 100644 --- a/erpnext/accounts/doctype/dunning/test_dunning.py +++ b/erpnext/accounts/doctype/dunning/test_dunning.py @@ -122,6 +122,41 @@ class TestDunning(ERPNextTestSuite): self.assertEqual(sales_invoice.status, "Overdue") self.assertEqual(dunning.status, "Unresolved") + def test_payment_against_invoice_with_multiple_overdue_installments_in_dunning(self): + """ + When an invoice has more than one overdue installment, its Dunning holds one + Overdue Payment row per installment. Submitting a Payment Entry for the invoice + must resolve the Dunning without raising a TimestampMismatchError caused by the + same Dunning being loaded and saved more than once. + """ + create_payment_terms_template_for_dunning() + # Post far enough in the past that BOTH installments (5 and 10 credit days) are overdue. + sales_invoice = create_sales_invoice_against_cost_center( + posting_date=add_days(today(), -15), + qty=1, + rate=100, + do_not_submit=True, + ) + sales_invoice.payment_terms_template = "_Test 50-50 for Dunning" + sales_invoice.submit() + + dunning = create_dunning_from_sales_invoice(sales_invoice.name) + # Two overdue installments -> two overdue payment rows for the same invoice. + self.assertEqual(len(dunning.overdue_payments), 2) + dunning.submit() + self.assertEqual(dunning.status, "Unresolved") + + # Pay the invoice in full. This previously raised TimestampMismatchError on the Dunning. + pe = get_payment_entry("Sales Invoice", sales_invoice.name) + pe.reference_no, pe.reference_date = "3", nowdate() + pe.insert() + pe.submit() + + sales_invoice.reload() + dunning.reload() + self.assertEqual(sales_invoice.outstanding_amount, 0) + self.assertEqual(dunning.status, "Resolved") + def test_dunning_resolution_from_credit_note(self): """ Test that dunning is resolved when a credit note is issued against the original invoice. diff --git a/erpnext/accounts/doctype/item_tax_template/item_tax_template_dashboard.py b/erpnext/accounts/doctype/item_tax_template/item_tax_template_dashboard.py index 5a2bd720dd3..58320b237c3 100644 --- a/erpnext/accounts/doctype/item_tax_template/item_tax_template_dashboard.py +++ b/erpnext/accounts/doctype/item_tax_template/item_tax_template_dashboard.py @@ -8,6 +8,6 @@ def get_data(): {"label": _("Pre Sales"), "items": ["Quotation", "Supplier Quotation"]}, {"label": _("Sales"), "items": ["Sales Invoice", "Sales Order", "Delivery Note"]}, {"label": _("Purchase"), "items": ["Purchase Invoice", "Purchase Order", "Purchase Receipt"]}, - {"label": _("Stock"), "items": ["Item Groups", "Item"]}, + {"label": _("Stock"), "items": ["Item Group", "Item"]}, ], } diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js index a4f096af595..3e5a3071c8f 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.js +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js @@ -95,7 +95,7 @@ frappe.ui.form.on("Journal Entry", { ); } - if (frm.doc.docstatus == 1) { + if (frm.doc.docstatus == 1 && !frm.doc.reversal_of) { frm.add_custom_button( __("Reverse Journal Entry"), function () { diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 331ed50dea3..90baa886ef5 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -1777,6 +1777,20 @@ def make_inter_company_journal_entry(name, voucher_type, company): @frappe.whitelist() def make_reverse_journal_entry(source_name, target_doc=None): + # `get_mapped_doc` checks this as well, but the guards below disclose which entry + # reverses which, so read access has to be settled before they run + if not frappe.has_permission("Journal Entry", doc=source_name): + frappe.throw(_("Not permitted"), frappe.PermissionError) + + reversal_of = frappe.db.get_value("Journal Entry", source_name, "reversal_of") + if reversal_of: + frappe.throw( + _("{0} is already a Reverse Journal Entry of {1}. Cancel it instead of reversing it.").format( + get_link_to_form("Journal Entry", source_name), + get_link_to_form("Journal Entry", reversal_of), + ) + ) + existing_reverse = frappe.db.exists("Journal Entry", {"reversal_of": source_name, "docstatus": 1}) if existing_reverse: frappe.throw( diff --git a/erpnext/accounts/doctype/journal_entry/test_journal_entry.py b/erpnext/accounts/doctype/journal_entry/test_journal_entry.py index 51922757d05..7b9efbd7f55 100644 --- a/erpnext/accounts/doctype/journal_entry/test_journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/test_journal_entry.py @@ -248,6 +248,27 @@ class TestJournalEntry(ERPNextTestSuite): self.check_gl_entries() + def test_disallow_reversal_of_a_reversal_journal_entry(self): + from erpnext.accounts.doctype.journal_entry.journal_entry import make_reverse_journal_entry + + jv = make_journal_entry("_Test Bank - _TC", "Sales - _TC", 100, submit=True) + + rjv = make_reverse_journal_entry(jv.name) + rjv.posting_date = nowdate() + rjv.submit() + + self.assertRaisesRegex( + frappe.ValidationError, + "is already a Reverse Journal Entry", + make_reverse_journal_entry, + rjv.name, + ) + + # the guard must not disclose the reversal to a user who cannot read the entry + frappe.set_user("Guest") + self.addCleanup(frappe.set_user, "Administrator") + self.assertRaises(frappe.PermissionError, make_reverse_journal_entry, rjv.name) + def test_disallow_change_in_account_currency_for_a_party(self): # create jv in USD jv = make_journal_entry("_Test Bank USD - _TC", "_Test Receivable USD - _TC", 100, save=False) diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.json b/erpnext/accounts/doctype/pos_invoice/pos_invoice.json index 14c5153f0b9..4ff2ea1eb19 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.json +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.json @@ -497,6 +497,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval:doc.currency && doc.currency != erpnext.get_currency(doc.company)", "depends_on": "customer", "fieldname": "currency_and_price_list", "fieldtype": "Section Break", @@ -1636,7 +1637,7 @@ "icon": "fa fa-file-text", "is_submittable": 1, "links": [], - "modified": "2026-05-28 12:22:50.253090", + "modified": "2026-08-12 12:00:00.000000", "modified_by": "Administrator", "module": "Accounts", "name": "POS Invoice", diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index d2c45a8681f..b28762f546b 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -504,6 +504,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval:doc.currency && doc.currency != erpnext.get_currency(doc.company)", "fieldname": "currency_and_price_list", "fieldtype": "Section Break", "label": "Currency and Price List", @@ -1703,7 +1704,7 @@ "idx": 204, "is_submittable": 1, "links": [], - "modified": "2026-08-05 15:40:16.519774", + "modified": "2026-08-12 12:00:00.000000", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice", diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 82fed84eafb..17b4ca6152b 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -286,9 +286,7 @@ class PurchaseInvoice(BuyingController): self.check_conversion_rate() self.validate_credit_to_acc() self.clear_unallocated_advances("Purchase Invoice Advance", "advances") - self.check_for_on_hold_or_closed_status( - "Purchase Order", "purchase_order", exclude_if_field="purchase_receipt" - ) + self.check_purchase_order_on_hold_or_close("purchase_order", exclude_if_field="purchase_receipt") self.validate_with_previous_doc() self.validate_uom_is_integer("uom", "qty") self.validate_uom_is_integer("stock_uom", "stock_qty") @@ -300,6 +298,7 @@ class PurchaseInvoice(BuyingController): self.validate_multiple_billing("Purchase Receipt", "pr_detail", "amount") self.set_status() self.validate_purchase_receipt_if_update_stock() + self.validate_exchange_rate_with_purchase_receipt() validate_inter_company_party( self.doctype, self.supplier, self.company, self.inter_company_invoice_reference ) @@ -323,6 +322,47 @@ class PurchaseInvoice(BuyingController): if total_billed_qty and total_received_qty: self.per_received = total_received_qty / total_billed_qty * 100 + def validate_exchange_rate_with_purchase_receipt(self): + if self.is_internal_transfer() or not erpnext.is_perpetual_inventory_enabled(self.company): + return + + stock_items = self.get_stock_items() + receipts = { + item.purchase_receipt + for item in self.items + if item.purchase_receipt and item.item_code in stock_items + } + if not receipts: + return + + if frappe.db.get_single_value("Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate"): + return + + mismatched = [ + f"{frappe.bold(row.name)} ({row.conversion_rate})" + for row in frappe.get_all( + "Purchase Receipt", + filters={"name": ("in", list(receipts))}, + fields=["name", "currency", "conversion_rate"], + ) + if row.currency == self.currency + and flt(row.conversion_rate) + and flt(row.conversion_rate) != flt(self.conversion_rate) + ] + if not mismatched: + return + + frappe.throw( + _( + "Exchange rate {0} does not match the exchange rate of Purchase Receipt {1}. Use the same exchange rate as the Purchase Receipt or enable {2} in {3} to adjust the landed cost based on this invoice." + ).format( + frappe.bold(self.conversion_rate), + ", ".join(mismatched), + frappe.bold(_("Set Landed Cost Based on Purchase Invoice Rate")), + get_link_to_form("Buying Settings", "Buying Settings", _("Buying Settings")), + ) + ) + def validate_invoice_hold(self): if self.is_return: frappe.throw(_("Return Purchase Invoice cannot be held.")) @@ -1752,9 +1792,7 @@ class PurchaseInvoice(BuyingController): super().on_cancel() PurchaseTaxWithholding(self).on_cancel() - self.check_for_on_hold_or_closed_status( - "Purchase Order", "purchase_order", exclude_if_field="purchase_receipt" - ) + self.check_purchase_order_on_hold_or_close("purchase_order", exclude_if_field="purchase_receipt") if self.is_return and not self.update_billed_amount_in_purchase_order: # NOTE status updating bypassed for is_return diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 8d9e7309366..650da3a499c 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -507,6 +507,12 @@ class TestPurchaseInvoice(ERPNextTestSuite, StockTestMixin): ) frappe.db.set_single_value("Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate", 0) + self.addCleanup( + frappe.db.set_single_value, + "Buying Settings", + "set_landed_cost_based_on_purchase_invoice_rate", + original_value, + ) pr = make_purchase_receipt( company="_Test Company with perpetual inventory", @@ -518,25 +524,15 @@ class TestPurchaseInvoice(ERPNextTestSuite, StockTestMixin): pi = create_purchase_invoice(pr.name) pi.conversion_rate = 80 + self.assertRaises(frappe.ValidationError, pi.insert) + + pi.conversion_rate = 70 pi.insert() pi.submit() - # Get exchnage gain and loss account exchange_gain_loss_account = frappe.db.get_value("Company", pi.company, "exchange_gain_loss_account") - - # fetching the latest GL Entry with exchange gain and loss account account - amount = frappe.db.get_value( - "GL Entry", {"account": exchange_gain_loss_account, "voucher_no": pi.name}, "debit" - ) - - discrepancy_caused_by_exchange_rate_diff = abs( - pi.items[0].base_net_amount - pr.items[0].base_net_amount - ) - - self.assertEqual(discrepancy_caused_by_exchange_rate_diff, amount) - - frappe.db.set_single_value( - "Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate", original_value + self.assertFalse( + frappe.db.exists("GL Entry", {"account": exchange_gain_loss_account, "voucher_no": pi.name}) ) def test_purchase_invoice_with_exchange_rate_difference_for_non_stock_item(self): @@ -544,7 +540,17 @@ class TestPurchaseInvoice(ERPNextTestSuite, StockTestMixin): make_purchase_invoice as create_purchase_invoice, ) - # Creating Purchase Invoice with USD currency + original_value = frappe.db.get_single_value( + "Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate" + ) + frappe.db.set_single_value("Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate", 0) + self.addCleanup( + frappe.db.set_single_value, + "Buying Settings", + "set_landed_cost_based_on_purchase_invoice_rate", + original_value, + ) + pr = frappe.new_doc("Purchase Receipt") pr.currency = "USD" pr.company = "_Test Company with perpetual inventory" @@ -558,34 +564,20 @@ class TestPurchaseInvoice(ERPNextTestSuite, StockTestMixin): "rate": 100, }, ) - pr.append( - "items", - {"item_code": "_Test Item", "qty": 1, "rate": 5, "warehouse": "Stores - TCP1"}, - ) pr.insert() pr.submit() - # Createing purchase invoice against Purchase Receipt pi = create_purchase_invoice(pr.name) pi.conversion_rate = 80 pi.credit_to = "_Test Payable USD - TCP1" pi.insert() pi.submit() - # Get exchnage gain and loss account exchange_gain_loss_account = frappe.db.get_value("Company", pi.company, "exchange_gain_loss_account") - - # fetching the latest GL Entry with exchange gain and loss account account - amount = frappe.db.get_value( - "GL Entry", {"account": exchange_gain_loss_account, "voucher_no": pi.name}, "credit" + self.assertFalse( + frappe.db.exists("GL Entry", {"account": exchange_gain_loss_account, "voucher_no": pi.name}) ) - discrepancy_caused_by_exchange_rate_diff = abs( - pi.items[1].base_net_amount - pr.items[1].base_net_amount - ) - - self.assertEqual(flt(discrepancy_caused_by_exchange_rate_diff, 2), amount) - def test_purchase_invoice_change_naming_series(self): pi = frappe.copy_doc(self.globalTestRecords["Purchase Invoice"][1]) pi.insert() diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index dd09e7b1fd8..c75b268d417 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -612,6 +612,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval:doc.currency && doc.currency != erpnext.get_currency(doc.company)", "depends_on": "customer", "fieldname": "currency_and_price_list", "fieldtype": "Section Break", @@ -2364,7 +2365,7 @@ "link_fieldname": "consolidated_invoice" } ], - "modified": "2026-05-28 12:15:12.486443", + "modified": "2026-08-12 12:00:00.000000", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", diff --git a/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template_dashboard.py b/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template_dashboard.py index 6432acaae93..fca17cc14ec 100644 --- a/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template_dashboard.py +++ b/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template_dashboard.py @@ -7,10 +7,9 @@ def get_data(): "non_standard_fieldnames": { "Tax Rule": "sales_tax_template", "Subscription": "sales_tax_template", - "Restaurant": "default_tax_template", }, "transactions": [ {"label": _("Transactions"), "items": ["Sales Invoice", "Sales Order", "Delivery Note"]}, - {"label": _("References"), "items": ["POS Profile", "Subscription", "Restaurant", "Tax Rule"]}, + {"label": _("References"), "items": ["POS Profile", "Subscription", "Tax Rule"]}, ], } diff --git a/erpnext/accounts/print_format/pos_invoice_with_item_image/pos_invoice_with_item_image.json b/erpnext/accounts/print_format/pos_invoice_with_item_image/pos_invoice_with_item_image.json index a9d81808a78..6a456894e65 100644 --- a/erpnext/accounts/print_format/pos_invoice_with_item_image/pos_invoice_with_item_image.json +++ b/erpnext/accounts/print_format/pos_invoice_with_item_image/pos_invoice_with_item_image.json @@ -9,7 +9,7 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Customer Name:
\n\t\t\t\t\t\t
Bill to:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.customer_name }}
\n\t\t\t\t\t\t
\n \t\t\t\t\t{% if doc.customer_address %}\n \t\t\t\t\t\t{% set customer_address = frappe.db.get_value(\"Address\", doc.customer_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n \t\t\t\t\t\t{{ customer_address.address_line1 or \"\" }}
\n \t\t\t\t\t\t{% if customer_address.address_line2 %}{{ customer_address.address_line2 }}
{% endif %}\n \t\t\t\t\t\t{{ customer_address.city or \"\" }} {{ customer_address.state or \"\" }} {{ customer_address.pincode or \"\" }} {{ customer_address.country or \"\" }}
\n \t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Invoice Number:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.name }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Invoice Date:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.posting_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Payment Due Date:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.due_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}{{ _(\"Rate\") }}{{ _(\"Amount\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}{{ item.get_formatted(\"net_rate\", doc) }}{{ item.get_formatted(\"net_amount\", doc) }}
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- for tax in doc.taxes -%}\n\t\t\t\t\t{%- if (tax.tax_amount or print_settings.print_taxes_with_zero_amount) and (not tax.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) -%}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t\t{%- if doc.apply_discount_on == \"Grand Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ _(\"Sub Total:\") }}{{ doc.get_formatted(\"total\", doc) }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):{{ tax.get_formatted(\"tax_amount\") }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {{ _(\"In Words: \") }}{{ doc.in_words }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ _(\"Grand Total:\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ doc.get_formatted(\"grand_total\", doc) }}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n\t
\n\t\t{% if not no_letterhead and footer %}\n\t\t
\n\t\t\t{{ footer }}\n\t\t
\n\t\t{% endif %}\n\t\t{% if print_settings.repeat_header_footer %}\n\t\t

\n\t\t\t{{ _(\"Page {0} of {1}\").format('', '') }}\n\t\t

\n\t\t{% endif %}\n\t
\n
\n{% endfor %}", + "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Customer Name:
\n\t\t\t\t\t\t
Bill to:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.customer_name }}
\n\t\t\t\t\t\t
\n \t\t\t\t\t{% if doc.customer_address %}\n \t\t\t\t\t\t{% set customer_address = frappe.db.get_value(\"Address\", doc.customer_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n \t\t\t\t\t\t{{ customer_address.address_line1 or \"\" }}
\n \t\t\t\t\t\t{% if customer_address.address_line2 %}{{ customer_address.address_line2 }}
{% endif %}\n \t\t\t\t\t\t{{ customer_address.city or \"\" }} {{ customer_address.state or \"\" }} {{ customer_address.pincode or \"\" }} {{ customer_address.country or \"\" }}
\n \t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Invoice Number:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.name }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Invoice Date:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.posting_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Payment Due Date:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.due_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}{{ _(\"Rate\") }}{{ _(\"Amount\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}{{ item.get_formatted(\"net_rate\", doc) }}{{ item.get_formatted(\"net_amount\", doc) }}
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- for tax in doc.taxes -%}\n\t\t\t\t\t{%- if (tax.tax_amount or print_settings.print_taxes_with_zero_amount) and (not tax.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) -%}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t\t{%- if doc.apply_discount_on == \"Grand Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ _(\"Sub Total:\") }}{{ doc.get_formatted(\"total\", doc) }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):{{ tax.get_formatted(\"tax_amount\") }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {{ _(\"In Words: \") }}{{ doc.in_words }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ _(\"Grand Total:\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ doc.get_formatted(\"grand_total\", doc) }}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n\t
\n\t\t{% if not no_letterhead and footer %}\n\t\t
\n\t\t\t{{ footer }}\n\t\t
\n\t\t{% endif %}\n\t\t{% if print_settings.repeat_header_footer %}\n\t\t

\n\t\t\t{{ _(\"Page {0} of {1}\").format('', '') }}\n\t\t

\n\t\t{% endif %}\n\t
\n
\n{% endfor %}", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, diff --git a/erpnext/accounts/print_format/purchase_invoice_with_item_image/purchase_invoice_with_item_image.json b/erpnext/accounts/print_format/purchase_invoice_with_item_image/purchase_invoice_with_item_image.json index f3677f07639..acd011f251b 100644 --- a/erpnext/accounts/print_format/purchase_invoice_with_item_image/purchase_invoice_with_item_image.json +++ b/erpnext/accounts/print_format/purchase_invoice_with_item_image/purchase_invoice_with_item_image.json @@ -9,7 +9,7 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Supplier Name:\") }}
\n\t\t\t\t\t\t
{{ _(\"Supplier Address:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.supplier_name }}
\n\t\t\t\t\t\t
\n \t\t\t\t\t{% if doc.supplier_address %}\n \t\t\t\t\t\t{% set supplier_address = frappe.db.get_value(\"Address\", doc.supplier_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n {{ doc.supplier_name }}
\n \t\t\t\t\t\t{{ supplier_address.address_line1 or \"\" }}
\n \t\t\t\t\t\t{% if supplier_address.address_line2 %}{{ supplier_address.address_line2 }}
{% endif %}\n \t\t\t\t\t\t{{ supplier_address.city or \"\" }} {{ supplier_address.state or \"\" }} {{ supplier_address.pincode or \"\" }} {{ supplier_address.country or \"\" }}
\n \t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Purchase Invoice:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.name }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Posting Date:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.posting_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Due By:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.due_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}{{ _(\"Rate\") }}{{ _(\"Amount\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}{{ item.get_formatted(\"net_rate\", doc) }}{{ item.get_formatted(\"net_amount\", doc) }}
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- for tax in doc.taxes -%}\n\t\t\t\t\t{%- if (tax.tax_amount or print_settings.print_taxes_with_zero_amount) and (not tax.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) -%}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t\t{%- if doc.apply_discount_on == \"Grand Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ _(\"Sub Total:\") }}{{ doc.get_formatted(\"total\", doc) }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):{{ tax.get_formatted(\"tax_amount\") }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {{ _(\"In Words: \") }}{{ doc.in_words }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ _(\"Grand Total:\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ doc.get_formatted(\"grand_total\", doc) }}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n\t
\n\t\t{% if not no_letterhead and footer %}\n\t\t
\n\t\t\t{{ footer }}\n\t\t
\n\t\t{% endif %}\n\t\t{% if print_settings.repeat_header_footer %}\n\t\t

\n\t\t\t{{ _(\"Page {0} of {1}\").format('', '') }}\n\t\t

\n\t\t{% endif %}\n\t
\n
\n{% endfor %}", + "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Supplier Name:\") }}
\n\t\t\t\t\t\t
{{ _(\"Supplier Address:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.supplier_name }}
\n\t\t\t\t\t\t
\n \t\t\t\t\t{% if doc.supplier_address %}\n \t\t\t\t\t\t{% set supplier_address = frappe.db.get_value(\"Address\", doc.supplier_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n {{ doc.supplier_name }}
\n \t\t\t\t\t\t{{ supplier_address.address_line1 or \"\" }}
\n \t\t\t\t\t\t{% if supplier_address.address_line2 %}{{ supplier_address.address_line2 }}
{% endif %}\n \t\t\t\t\t\t{{ supplier_address.city or \"\" }} {{ supplier_address.state or \"\" }} {{ supplier_address.pincode or \"\" }} {{ supplier_address.country or \"\" }}
\n \t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Purchase Invoice:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.name }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Posting Date:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.posting_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Due By:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.due_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}{{ _(\"Rate\") }}{{ _(\"Amount\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}{{ item.get_formatted(\"net_rate\", doc) }}{{ item.get_formatted(\"net_amount\", doc) }}
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- for tax in doc.taxes -%}\n\t\t\t\t\t{%- if (tax.tax_amount or print_settings.print_taxes_with_zero_amount) and (not tax.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) -%}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t\t{%- if doc.apply_discount_on == \"Grand Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ _(\"Sub Total:\") }}{{ doc.get_formatted(\"total\", doc) }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):{{ tax.get_formatted(\"tax_amount\") }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {{ _(\"In Words: \") }}{{ doc.in_words }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ _(\"Grand Total:\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ doc.get_formatted(\"grand_total\", doc) }}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n\t
\n\t\t{% if not no_letterhead and footer %}\n\t\t
\n\t\t\t{{ footer }}\n\t\t
\n\t\t{% endif %}\n\t\t{% if print_settings.repeat_header_footer %}\n\t\t

\n\t\t\t{{ _(\"Page {0} of {1}\").format('', '') }}\n\t\t

\n\t\t{% endif %}\n\t
\n
\n{% endfor %}", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, diff --git a/erpnext/accounts/print_format/sales_invoice_with_item_image/sales_invoice_with_item_image.json b/erpnext/accounts/print_format/sales_invoice_with_item_image/sales_invoice_with_item_image.json index 5f19124c267..756087e819a 100644 --- a/erpnext/accounts/print_format/sales_invoice_with_item_image/sales_invoice_with_item_image.json +++ b/erpnext/accounts/print_format/sales_invoice_with_item_image/sales_invoice_with_item_image.json @@ -9,7 +9,7 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Customer Name:
\n\t\t\t\t\t\t
Bill to:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.customer_name }}
\n\t\t\t\t\t\t
\n \t\t\t\t\t{% if doc.customer_address %}\n \t\t\t\t\t\t{% set customer_address = frappe.db.get_value(\"Address\", doc.customer_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n \t\t\t\t\t\t{{ customer_address.address_line1 or \"\" }}
\n \t\t\t\t\t\t{% if customer_address.address_line2 %}{{ customer_address.address_line2 }}
{% endif %}\n \t\t\t\t\t\t{{ customer_address.city or \"\" }} {{ customer_address.state or \"\" }} {{ customer_address.pincode or \"\" }} {{ customer_address.country or \"\" }}
\n \t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Invoice Number:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.name }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Invoice Date:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.posting_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Payment Due Date:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.due_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}{{ _(\"Rate\") }}{{ _(\"Amount\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}{{ item.get_formatted(\"net_rate\", doc) }}{{ item.get_formatted(\"net_amount\", doc) }}
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- for tax in doc.taxes -%}\n\t\t\t\t\t{%- if (tax.tax_amount or print_settings.print_taxes_with_zero_amount) and (not tax.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) -%}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t\t{%- if doc.apply_discount_on == \"Grand Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ _(\"Sub Total:\") }}{{ doc.get_formatted(\"total\", doc) }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):{{ tax.get_formatted(\"tax_amount\") }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {{ _(\"In Words: \") }}{{ doc.in_words }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ _(\"Grand Total:\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ doc.get_formatted(\"grand_total\", doc) }}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n\t
\n\t\t{% if not no_letterhead and footer %}\n\t\t
\n\t\t\t{{ footer }}\n\t\t
\n\t\t{% endif %}\n\t\t{% if print_settings.repeat_header_footer %}\n\t\t

\n\t\t\t{{ _(\"Page {0} of {1}\").format('', '') }}\n\t\t

\n\t\t{% endif %}\n\t
\n
\n{% endfor %}", + "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Customer Name:
\n\t\t\t\t\t\t
Bill to:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.customer_name }}
\n\t\t\t\t\t\t
\n \t\t\t\t\t{% if doc.customer_address %}\n \t\t\t\t\t\t{% set customer_address = frappe.db.get_value(\"Address\", doc.customer_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n \t\t\t\t\t\t{{ customer_address.address_line1 or \"\" }}
\n \t\t\t\t\t\t{% if customer_address.address_line2 %}{{ customer_address.address_line2 }}
{% endif %}\n \t\t\t\t\t\t{{ customer_address.city or \"\" }} {{ customer_address.state or \"\" }} {{ customer_address.pincode or \"\" }} {{ customer_address.country or \"\" }}
\n \t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Invoice Number:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.name }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Invoice Date:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.posting_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Payment Due Date:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.due_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}{{ _(\"Rate\") }}{{ _(\"Amount\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}{{ item.get_formatted(\"net_rate\", doc) }}{{ item.get_formatted(\"net_amount\", doc) }}
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- for tax in doc.taxes -%}\n\t\t\t\t\t{%- if (tax.tax_amount or print_settings.print_taxes_with_zero_amount) and (not tax.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) -%}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t\t{%- if doc.apply_discount_on == \"Grand Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ _(\"Sub Total:\") }}{{ doc.get_formatted(\"total\", doc) }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):{{ tax.get_formatted(\"tax_amount\") }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {{ _(\"In Words: \") }}{{ doc.in_words }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ _(\"Grand Total:\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ doc.get_formatted(\"grand_total\", doc) }}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n\t
\n\t\t{% if not no_letterhead and footer %}\n\t\t
\n\t\t\t{{ footer }}\n\t\t
\n\t\t{% endif %}\n\t\t{% if print_settings.repeat_header_footer %}\n\t\t

\n\t\t\t{{ _(\"Page {0} of {1}\").format('', '') }}\n\t\t

\n\t\t{% endif %}\n\t
\n
\n{% endfor %}", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.js b/erpnext/accounts/report/accounts_payable/accounts_payable.js index ece851c9a69..f1fd8ebb579 100644 --- a/erpnext/accounts/report/accounts_payable/accounts_payable.js +++ b/erpnext/accounts/report/accounts_payable/accounts_payable.js @@ -94,10 +94,15 @@ frappe.query_reports["Accounts Payable"] = { options: get_party_type_options(), on_change: function () { frappe.query_report.set_filter_value("party", ""); - frappe.query_report.toggle_filter_display( - "supplier_group", - frappe.query_report.get_filter_value("party_type") !== "Supplier" - ); + let is_supplier = frappe.query_report.get_filter_value("party_type") === "Supplier"; + let supplier_group_filter = frappe.query_report.get_filter("supplier_group"); + if (supplier_group_filter) { + supplier_group_filter.df.hidden = !is_supplier; + } + frappe.query_report.toggle_filter_display("supplier_group", !is_supplier); + if (!is_supplier) { + frappe.query_report.set_filter_value("supplier_group", []); + } }, }, { diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index 47fdf9516f7..8f6ee266286 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -7,6 +7,7 @@ from collections import OrderedDict import frappe from frappe import _, qb, query_builder, scrub from frappe.database.schema import get_definition +from frappe.permissions import get_allowed_docs_for_doctype from frappe.query_builder import Criterion from frappe.query_builder.functions import Date, Substring, Sum from frappe.utils import cint, cstr, flt, getdate, nowdate @@ -52,6 +53,7 @@ class ReceivablePayableReport: self.filters = frappe._dict(filters or {}) self.qb_selection_filter = [] self.ple = qb.DocType("Payment Ledger Entry") + self.sales_person_records = None self.filters.report_date = getdate(self.filters.report_date or nowdate()) self.age_as_on = ( getdate(nowdate()) @@ -92,6 +94,7 @@ class ReceivablePayableReport: self.party_type = get_party_types_from_account_type(self.account_type) self.party_details = {} self.invoices = set() + self.sales_person_records = None self.skip_total_row = 0 self.advance_payment_doctypes = get_advance_payment_doctypes() @@ -206,7 +209,7 @@ class ReceivablePayableReport: def get_invoices(self, ple): if ple.voucher_type in ("Sales Invoice", "Purchase Invoice"): - if self.filters.get("sales_person"): + if self.sales_person_records is not None: if ple.voucher_no in self.sales_person_records.get( "Sales Invoice", [] ) or ple.party in self.sales_person_records.get("Customer", []): @@ -237,7 +240,7 @@ class ReceivablePayableReport: ] def get_voucher_balance(self, ple): - if self.filters.get("sales_person"): + if self.sales_person_records is not None: if not ( ple.party in self.sales_person_records.get("Customer", []) or ple.against_voucher_no in self.sales_person_records.get("Sales Invoice", []) @@ -896,25 +899,54 @@ class ReceivablePayableReport: self.ple_query = query + def get_permitted_sales_persons(self, parenttype): + if self.account_type != "Receivable": + return None + + permissions = frappe.permissions.get_user_permissions(frappe.session.user).get("Sales Person", []) + if not permissions: + return None + + return get_allowed_docs_for_doctype(permissions, parenttype) + def get_sales_invoices_or_customers_based_on_sales_person(self): + parenttypes = ["Customer", "Sales Invoice"] + permitted = {p: self.get_permitted_sales_persons(p) for p in parenttypes} + + if not (self.filters.get("sales_person") or any(p is not None for p in permitted.values())): + return + + steam = frappe.qb.DocType("Sales Team") + + scope = [] + for parenttype in parenttypes: + criterion = steam.parenttype == parenttype + if (allowed := permitted[parenttype]) is not None: + criterion &= steam.sales_person.isin(allowed or [""]) + scope.append(criterion) + + conditions = [Criterion.any(scope)] + if self.filters.get("sales_person"): lft, rgt = frappe.db.get_value("Sales Person", self.filters.get("sales_person"), ["lft", "rgt"]) - - # nosemgrep - records = frappe.db.sql( - """ - select distinct parent, parenttype - from `tabSales Team` steam - where parenttype in ('Customer', 'Sales Invoice') - and exists(select name from `tabSales Person` where lft >= %s and rgt <= %s and name = steam.sales_person) - """, - (lft, rgt), - as_dict=1, + sp = frappe.qb.DocType("Sales Person") + conditions.append( + steam.sales_person.isin( + frappe.qb.from_(sp).select(sp.name).where((sp.lft >= lft) & (sp.rgt <= rgt)) + ) ) - self.sales_person_records = frappe._dict() - for d in records: - self.sales_person_records.setdefault(d.parenttype, set()).add(d.parent) + records = ( + frappe.qb.from_(steam) + .select(steam.parent, steam.parenttype) + .distinct() + .where(Criterion.all(conditions)) + .run(as_dict=1) + ) + + self.sales_person_records = frappe._dict() + for d in records: + self.sales_person_records.setdefault(d.parenttype, set()).add(d.parent) def get_invoices_based_on_sales_partner(self): if not self.filters.get("sales_partner"): diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js index 7ebaf84d9d2..f41d8a27113 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.js +++ b/erpnext/accounts/report/general_ledger/general_ledger.js @@ -175,7 +175,7 @@ frappe.query_reports["General Ledger"] = { fieldname: "include_dimensions", label: __("Consider Accounting Dimensions"), fieldtype: "Check", - default: 1, + default: frappe.boot.sysdefaults.disable_include_dimensions ? 0 : 1, }, { fieldname: "disable_opening_balance_calculation", diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index 8d03e2afe37..d73faead0f7 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -510,6 +510,7 @@ class GrossProfitGenerator: self.average_buying_rate = {} self.filters = frappe._dict(filters) self.load_invoice_items() + self.load_drop_ship_buying_rates() self.get_delivery_notes() self.load_product_bundle() @@ -518,6 +519,7 @@ class GrossProfitGenerator: self.load_non_stock_items() self.get_returned_invoice_items() + self.allocate_legacy_return_items() self.process() def process(self): @@ -534,6 +536,8 @@ class GrossProfitGenerator: base_amount = 0 for row in reversed(self.si_list): + sales_invoice_item = row.item_row + if self.filters.get("group_by") == "Monthly": row.monthly = formatdate(row.posting_date, "MMM YYYY") @@ -596,7 +600,7 @@ class GrossProfitGenerator: row.buying_rate, row.base_rate = 0.0, 0.0 if self.is_not_invoice_row(row): - self.update_return_invoices(row) + self.update_return_invoices(row, sales_invoice_item) if grouped_by_invoice and row.indent == 1.0: buying_amount += row.buying_amount @@ -623,26 +627,32 @@ class GrossProfitGenerator: if self.grouped: self.get_average_rate_based_on_group_by() - def update_return_invoices(self, row): - if row.parent in self.returned_invoices and row.item_code in self.returned_invoices[row.parent]: - returned_item_rows = self.returned_invoices[row.parent][row.item_code] - for returned_item_row in returned_item_rows: - # returned_items 'qty' should be stateful - if returned_item_row.qty != 0: - if row.qty >= abs(returned_item_row.qty): - row.qty += returned_item_row.qty - row.base_amount += flt(returned_item_row.base_amount, self.currency_precision) - returned_item_row.qty = 0 - returned_item_row.base_amount = 0 + def update_return_invoices(self, row, sales_invoice_item): + returned_item_rows = self.returned_invoices.get(row.parent, {}).get(sales_invoice_item) + if not returned_item_rows: + return - else: - row.qty = 0 - row.base_amount = 0 - returned_item_row.qty += row.qty - returned_item_row.base_amount += row.base_amount + for returned_item_row in returned_item_rows: + # returned_items 'qty' should be stateful + if returned_item_row.qty != 0: + if row.qty >= abs(returned_item_row.qty): + row.qty += returned_item_row.qty + row.base_amount += flt(returned_item_row.base_amount, self.currency_precision) + returned_item_row.qty = 0 + returned_item_row.base_amount = 0 - if not row.delivered_by_supplier: - row.buying_amount = flt(flt(row.qty) * flt(row.buying_rate), self.currency_precision) + else: + returned_item_row.qty += row.qty + returned_item_row.base_amount += row.base_amount + row.qty = 0 + row.base_amount = 0 + + if row.delivered_by_supplier: + buying_amount = self.get_drop_ship_buying_amount(row) + if buying_amount is not None: + row.buying_amount = flt(buying_amount, self.currency_precision) + else: + row.buying_amount = flt(flt(row.qty) * flt(row.buying_rate), self.currency_precision) def get_average_rate_based_on_group_by(self): for key in list(self.grouped): @@ -723,7 +733,8 @@ class GrossProfitGenerator: returned_invoices = frappe.db.sql( """ select - si.name, si_item.item_code, si_item.stock_qty as qty, si_item.base_net_amount as base_amount, si.return_against + si.name, si_item.item_code, si_item.sales_invoice_item, si_item.stock_qty as qty, + si_item.base_net_amount as base_amount, si.return_against from `tabSales Invoice` si, `tabSales Invoice Item` si_item where @@ -737,17 +748,73 @@ class GrossProfitGenerator: ) self.returned_invoices = frappe._dict() + self.legacy_returned_invoices = frappe._dict() for inv in returned_invoices: - self.returned_invoices.setdefault(inv.return_against, frappe._dict()).setdefault( - inv.item_code, [] + invoice_returns = ( + self.returned_invoices if inv.sales_invoice_item else self.legacy_returned_invoices + ) + invoice_returns.setdefault(inv.return_against, frappe._dict()).setdefault( + inv.sales_invoice_item or inv.item_code, [] ).append(inv) - def skip_row(self, row): - if self.filters.get("group_by") != "Invoice": - if not row.get(scrub(self.filters.get("group_by", ""))): - return True + def allocate_legacy_return_items(self): + source_invoice_items = {} + for row in reversed(self.si_list): + if row.is_return or not row.parent or self.skip_row(row): + continue - return False + source_invoice_items.setdefault((row.parent, row.item_code), {}).setdefault(row.item_row, row.qty) + + for invoice, legacy_invoice_items in self.legacy_returned_invoices.items(): + returned_invoice_items = self.returned_invoices.setdefault(invoice, frappe._dict()) + for item_code, legacy_item_rows in legacy_invoice_items.items(): + targets = self.get_legacy_return_targets( + source_invoice_items.get((invoice, item_code), {}), returned_invoice_items + ) + for legacy_item_row in legacy_item_rows: + self.allocate_legacy_return_item(legacy_item_row, targets, returned_invoice_items) + + def get_legacy_return_targets(self, source_invoice_items, returned_invoice_items): + targets = [] + for item_row, qty in source_invoice_items.items(): + linked_return_qty = sum( + flt(returned_item.qty) for returned_item in returned_invoice_items.get(item_row, []) + ) + if available_qty := max(flt(qty) + linked_return_qty, 0): + targets.append(frappe._dict(item_row=item_row, available_qty=available_qty)) + + targets.sort(key=lambda target: bool(returned_invoice_items.get(target.item_row))) + return targets + + def allocate_legacy_return_item(self, legacy_item_row, targets, returned_invoice_items): + remaining_qty = abs(flt(legacy_item_row.qty)) + remaining_base_amount = flt(legacy_item_row.base_amount) + if not remaining_qty: + return + + qty_sign = -1 if legacy_item_row.qty < 0 else 1 + for target in targets: + if not target.available_qty: + continue + + allocated_qty = min(target.available_qty, remaining_qty) + allocated_item_row = frappe._dict(legacy_item_row.copy()) + allocated_item_row.qty = qty_sign * allocated_qty + allocated_item_row.base_amount = remaining_base_amount * allocated_qty / remaining_qty + returned_invoice_items.setdefault(target.item_row, []).append(allocated_item_row) + + target.available_qty -= allocated_qty + remaining_qty -= allocated_qty + remaining_base_amount -= allocated_item_row.base_amount + if not remaining_qty: + break + + def skip_row(self, row): + group_by = self.filters.get("group_by") + if group_by in {"Invoice", "Monthly"}: + return False + + return not row.get(scrub(group_by)) def get_buying_amount_from_product_bundle(self, row, product_bundle): buying_amount = 0.0 @@ -781,28 +848,12 @@ class GrossProfitGenerator: # IMP NOTE # stock_ledger_entries should already be filtered by item_code and warehouse and # sorted by posting_date desc, posting_time desc - if ( - row.delivered_by_supplier - and row.so_detail - and ( - po_details := frappe.get_all( - "Purchase Order Item", - filters={"sales_order_item": row.so_detail, "docstatus": 1}, - pluck="name", - ) - ) - ): - from frappe.query_builder.functions import Sum + if row.delivered_by_supplier: + buying_amount = self.get_drop_ship_buying_amount(row) + if buying_amount is not None: + return buying_amount - table = frappe.qb.DocType("Purchase Invoice Item") - query = ( - frappe.qb.from_(table) - .select(Sum(table.qty * table.base_net_rate)) - .where((table.po_detail.isin(po_details)) & (table.docstatus == 1)) - ) - return flt(query.run()[0][0]) - - elif item_code in self.non_stock_items and (row.project or row.cost_center): + if item_code in self.non_stock_items and (row.project or row.cost_center): # Issue 6089-Get last purchasing rate for non-stock item item_rate = self.get_last_purchase_rate(item_code, row) return flt(row.qty) * item_rate @@ -833,6 +884,49 @@ class GrossProfitGenerator: return flt(row.qty) * self.get_average_buying_rate(row, item_code) + def load_drop_ship_buying_rates(self): + self.drop_ship_buying_rates = {} + sales_order_items = { + row.so_detail for row in self.si_list if row.delivered_by_supplier and row.so_detail + } + if not sales_order_items: + return + + from frappe.query_builder.functions import Sum + + purchase_order_item = frappe.qb.DocType("Purchase Order Item") + purchase_invoice_item = frappe.qb.DocType("Purchase Invoice Item") + buying_amounts = ( + frappe.qb.from_(purchase_order_item) + .left_join(purchase_invoice_item) + .on( + (purchase_invoice_item.po_detail == purchase_order_item.name) + & (purchase_invoice_item.docstatus == 1) + ) + .select( + purchase_order_item.sales_order_item, + Sum(purchase_invoice_item.qty * purchase_invoice_item.base_net_rate).as_("buying_amount"), + Sum(purchase_invoice_item.stock_qty).as_("stock_qty"), + ) + .where( + (purchase_order_item.sales_order_item.isin(sales_order_items)) + & (purchase_order_item.docstatus == 1) + ) + .groupby(purchase_order_item.sales_order_item) + .run(as_dict=True) + ) + + for row in buying_amounts: + self.drop_ship_buying_rates[row.sales_order_item] = ( + flt(row.buying_amount) / flt(row.stock_qty) if flt(row.stock_qty) else 0 + ) + + def get_drop_ship_buying_amount(self, row): + if row.so_detail not in self.drop_ship_buying_rates: + return + + return flt(row.qty) * self.drop_ship_buying_rates[row.so_detail] + def get_buying_amount_from_so_dn(self, sales_order, so_detail, item_code): from frappe.query_builder.functions import Avg diff --git a/erpnext/accounts/report/gross_profit/test_gross_profit.py b/erpnext/accounts/report/gross_profit/test_gross_profit.py index 1b26733e50a..43f03513c71 100644 --- a/erpnext/accounts/report/gross_profit/test_gross_profit.py +++ b/erpnext/accounts/report/gross_profit/test_gross_profit.py @@ -4,7 +4,7 @@ from frappe.utils import add_days, flt, get_first_day, get_last_day, nowdate from erpnext.accounts.doctype.sales_invoice.sales_invoice import make_delivery_note, make_sales_return from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice -from erpnext.accounts.report.gross_profit.gross_profit import execute +from erpnext.accounts.report.gross_profit.gross_profit import GrossProfitGenerator, execute from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note from erpnext.stock.doctype.item.test_item import create_item @@ -676,19 +676,9 @@ class TestGrossProfit(ERPNextTestSuite): self.assertEqual(total[8], 0.0) # gross profit % def test_drop_ship(self): - from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_invoice - from erpnext.selling.doctype.sales_order.sales_order import make_purchase_order, make_sales_invoice - from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order - from erpnext.stock.doctype.item.test_item import make_item + from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice - item = make_item("_Test Drop Ship Item", properties={"is_stock_item": 1, "delivered_by_supplier": 1}) - - so = make_sales_order(item=item.name, qty=10, rate=100) - po = make_purchase_order(so.name, selected_items=[so.items[0]])[0] - po.items[0].rate = 80 - po.supplier = "_Test Supplier" - po.submit() - make_purchase_invoice(po.name).submit() + so = self.create_drop_ship_order() si = make_sales_invoice(so.name).submit() filters = frappe._dict( @@ -700,6 +690,357 @@ class TestGrossProfit(ERPNextTestSuite): self.assertIsNone(data[1].buying_rate) self.assertEqual(data[1]["gross_profit_%"], 20) + def test_drop_ship_partial_billing_and_return(self): + from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice + + so = self.create_drop_ship_order() + first_invoice = make_sales_invoice(so.name) + first_invoice.items[0].qty = 4 + first_invoice.submit() + second_invoice = make_sales_invoice(so.name).submit() + + filters = frappe._dict( + company=first_invoice.company, + from_date=first_invoice.posting_date, + to_date=first_invoice.posting_date, + group_by="Invoice", + ) + _, data = execute(filters=filters) + invoice_rows = { + row.parent_invoice: row + for row in data + if row.parent_invoice in {first_invoice.name, second_invoice.name} and row.indent == 1 + } + self.assertEqual(invoice_rows[first_invoice.name].buying_amount, 320) + self.assertEqual(invoice_rows[second_invoice.name].buying_amount, 480) + + sales_return = make_sales_return(first_invoice.name) + sales_return.items[0].qty = -2 + sales_return.submit() + + _, data = execute(filters=filters) + first_invoice_row = next( + row for row in data if row.parent_invoice == first_invoice.name and row.indent == 1 + ) + self.assertEqual(first_invoice_row.qty, 2) + self.assertEqual(first_invoice_row.buying_amount, 160) + self.assertEqual(first_invoice_row.gross_profit, 40) + + def test_drop_ship_return_matches_sales_invoice_item(self): + from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_invoice + from erpnext.selling.doctype.sales_order.sales_order import make_purchase_order, make_sales_invoice + from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order + from erpnext.stock.doctype.item.test_item import make_item + + item = make_item( + "_Test Drop Ship Consolidated Return Item", + properties={"is_stock_item": 1, "delivered_by_supplier": 1}, + ) + sales_orders = [] + for qty, selling_rate, buying_rate in [(4, 100, 50), (6, 200, 80)]: + sales_order = make_sales_order(item=item.name, qty=qty, rate=selling_rate, do_not_submit=True) + sales_order.items[0].delivered_by_supplier = 1 + sales_order.items[0].supplier = "_Test Supplier" + sales_order.submit() + sales_orders.append(sales_order) + + purchase_order = make_purchase_order(sales_order.name, selected_items=[sales_order.items[0]])[0] + purchase_order.items[0].rate = buying_rate + purchase_order.supplier = "_Test Supplier" + purchase_order.submit() + make_purchase_invoice(purchase_order.name).submit() + + sales_invoice = make_sales_invoice(sales_orders[0].name) + sales_invoice = make_sales_invoice(sales_orders[1].name, target_doc=sales_invoice).submit() + sales_return = make_sales_return(sales_invoice.name) + sales_return.set("items", [sales_return.items[0]]) + sales_return.items[0].qty = -1 + sales_return.submit() + + filters = frappe._dict( + company=sales_invoice.company, + from_date=sales_invoice.posting_date, + to_date=sales_invoice.posting_date, + group_by="Invoice", + ) + _, data = execute(filters=filters) + invoice_rows = [row for row in data if row.parent_invoice == sales_invoice.name and row.indent == 1] + invoice_rows.sort(key=lambda row: row["avg._selling_rate"]) + self.assertEqual([row.qty for row in invoice_rows], [3, 6]) + self.assertEqual([row.buying_amount for row in invoice_rows], [150, 480]) + + def test_return_matches_sales_invoice_item_for_delivery_note(self): + make_stock_entry( + company=self.company, + item_code=self.item, + target=self.warehouse, + qty=4, + basic_rate=50, + ) + delivery_note = self.create_delivery_note(qty=4, rate=100) + sales_invoice = make_sales_invoice(delivery_note.name).submit() + sales_return = make_sales_return(sales_invoice.name) + sales_return.items[0].qty = -1 + sales_return.submit() + + filters = frappe._dict( + company=sales_invoice.company, + from_date=sales_invoice.posting_date, + to_date=sales_invoice.posting_date, + group_by="Invoice", + ) + _, data = execute(filters=filters) + invoice_row = next( + row for row in data if row.parent_invoice == sales_invoice.name and row.indent == 1 + ) + self.assertEqual(invoice_row.qty, 3) + self.assertEqual(invoice_row.selling_amount, 300) + + def test_return_combines_linked_and_legacy_item_buckets(self): + sales_invoice = self.create_sales_invoice(qty=4, rate=100) + linked_return = make_sales_return(sales_invoice.name) + linked_return.items[0].qty = -1 + linked_return.submit() + + legacy_return = make_sales_return(sales_invoice.name) + legacy_return.items[0].qty = -1 + legacy_return.submit() + frappe.db.set_value("Sales Invoice Item", legacy_return.items[0].name, "sales_invoice_item", None) + + filters = frappe._dict( + company=sales_invoice.company, + from_date=sales_invoice.posting_date, + to_date=sales_invoice.posting_date, + group_by="Invoice", + ) + _, data = execute(filters=filters) + invoice_row = next( + row for row in data if row.parent_invoice == sales_invoice.name and row.indent == 1 + ) + self.assertEqual(invoice_row.qty, 2) + self.assertEqual(invoice_row.selling_amount, 200) + + @ERPNextTestSuite.change_settings("Selling Settings", {"allow_multiple_items": True}) + def test_legacy_return_prefers_item_without_linked_return(self): + sales_invoice = self.create_sales_invoice(qty=2, rate=100, do_not_submit=True) + second_item = frappe.copy_doc(sales_invoice.items[0], ignore_no_copy=False) + second_item.rate = 200 + sales_invoice.append("items", second_item) + sales_invoice.submit() + + linked_return = make_sales_return(sales_invoice.name) + linked_return.set("items", [linked_return.items[0]]) + linked_return.items[0].qty = -1 + linked_return.submit() + + legacy_return = make_sales_return(sales_invoice.name) + legacy_return.set("items", [legacy_return.items[1]]) + legacy_return.items[0].qty = -1 + legacy_return.submit() + frappe.db.set_value("Sales Invoice Item", legacy_return.items[0].name, "sales_invoice_item", None) + + filters = frappe._dict( + company=sales_invoice.company, + from_date=sales_invoice.posting_date, + to_date=sales_invoice.posting_date, + group_by="Invoice", + ) + _, data = execute(filters=filters) + invoice_rows = [row for row in data if row.parent_invoice == sales_invoice.name and row.indent == 1] + invoice_rows.sort(key=lambda row: row["avg._selling_rate"]) + self.assertEqual([row.qty for row in invoice_rows], [1, 1]) + self.assertEqual([row.selling_amount for row in invoice_rows], [100, 200]) + + def test_legacy_return_remainder_spills_into_linked_item(self): + invoice = "SINV-TEST-RETURN-ALLOCATION" + linked_item = "SINV-ITEM-LINKED" + unlinked_item = "SINV-ITEM-LEGACY" + generator = GrossProfitGenerator.__new__(GrossProfitGenerator) + generator.currency_precision = 3 + generator.filters = frappe._dict(group_by="Invoice") + generator.returned_invoices = frappe._dict( + {invoice: frappe._dict({linked_item: [frappe._dict(qty=-1, base_amount=-100)]})} + ) + generator.legacy_returned_invoices = frappe._dict( + {invoice: frappe._dict({self.item: [frappe._dict(qty=-2, base_amount=-200)]})} + ) + linked_row = frappe._dict( + parent=invoice, + item_code=self.item, + item_row=linked_item, + is_return=False, + qty=3, + base_amount=300, + buying_rate=50, + delivered_by_supplier=False, + ) + unlinked_row = frappe._dict( + parent=invoice, + item_code=self.item, + item_row=unlinked_item, + is_return=False, + qty=1, + base_amount=100, + buying_rate=50, + delivered_by_supplier=False, + ) + + generator.si_list = [unlinked_row, linked_row] + generator.allocate_legacy_return_items() + generator.update_return_invoices(linked_row, linked_item) + generator.update_return_invoices(unlinked_row, unlinked_item) + + self.assertEqual((linked_row.qty, linked_row.base_amount), (1, 100)) + self.assertEqual((unlinked_row.qty, unlinked_row.base_amount), (0, 0)) + + def test_legacy_return_ignores_skipped_group_rows(self): + invoice = "SINV-TEST-SKIPPED-RETURN-ALLOCATION" + visible_item = "SINV-ITEM-WITH-PROJECT" + skipped_item = "SINV-ITEM-WITHOUT-PROJECT" + generator = GrossProfitGenerator.__new__(GrossProfitGenerator) + generator.currency_precision = 3 + generator.filters = frappe._dict(group_by="Project") + generator.returned_invoices = frappe._dict( + {invoice: frappe._dict({visible_item: [frappe._dict(qty=-1, base_amount=-100)]})} + ) + generator.legacy_returned_invoices = frappe._dict( + {invoice: frappe._dict({self.item: [frappe._dict(qty=-1, base_amount=-100)]})} + ) + visible_row = frappe._dict( + parent=invoice, + item_code=self.item, + item_row=visible_item, + is_return=False, + project="_Test Project", + qty=2, + base_amount=200, + buying_rate=50, + delivered_by_supplier=False, + ) + skipped_row = frappe._dict( + parent=invoice, + item_code=self.item, + item_row=skipped_item, + is_return=False, + project=None, + qty=1, + ) + + generator.si_list = [visible_row, skipped_row] + generator.allocate_legacy_return_items() + generator.update_return_invoices(visible_row, visible_item) + + self.assertNotIn(skipped_item, generator.returned_invoices[invoice]) + self.assertEqual((visible_row.qty, visible_row.base_amount), (0, 0)) + + def test_monthly_group_allocates_legacy_return(self): + invoice = "SINV-TEST-MONTHLY-RETURN-ALLOCATION" + item_row = "SINV-ITEM-MONTHLY-RETURN" + generator = GrossProfitGenerator.__new__(GrossProfitGenerator) + generator.currency_precision = 3 + generator.filters = frappe._dict(group_by="Monthly") + generator.returned_invoices = frappe._dict() + generator.legacy_returned_invoices = frappe._dict( + {invoice: frappe._dict({self.item: [frappe._dict(qty=-1, base_amount=-100)]})} + ) + invoice_row = frappe._dict( + parent=invoice, + item_code=self.item, + item_row=item_row, + is_return=False, + posting_date=nowdate(), + qty=1, + base_amount=100, + buying_rate=50, + delivered_by_supplier=False, + ) + + generator.si_list = [invoice_row] + generator.allocate_legacy_return_items() + generator.update_return_invoices(invoice_row, item_row) + + self.assertEqual((invoice_row.qty, invoice_row.base_amount), (0, 0)) + + def test_return_remainder_stays_available_for_next_row(self): + invoice = "SINV-TEST-RETURN-REMAINDER" + item_row = "SINV-ITEM-RETURN-REMAINDER" + returned_item = frappe._dict(qty=-2, base_amount=-200) + generator = GrossProfitGenerator.__new__(GrossProfitGenerator) + generator.currency_precision = 3 + generator.returned_invoices = frappe._dict({invoice: frappe._dict({item_row: [returned_item]})}) + first_row = frappe._dict( + parent=invoice, + item_code=self.item, + qty=1, + base_amount=100, + buying_rate=50, + delivered_by_supplier=False, + ) + second_row = first_row.copy() + + generator.update_return_invoices(first_row, item_row) + self.assertEqual((returned_item.qty, returned_item.base_amount), (-1, -100)) + + generator.update_return_invoices(second_row, item_row) + self.assertEqual((returned_item.qty, returned_item.base_amount), (0, 0)) + self.assertEqual((first_row.qty, second_row.qty), (0, 0)) + + @ERPNextTestSuite.change_settings("Selling Settings", {"allow_multiple_items": True}) + def test_return_keeps_buying_amount_of_unreturned_row(self): + unreturned_item = create_item( + "_Test Gross Profit Unreturned Item", warehouse=self.warehouse, company=self.company + ) + make_stock_entry( + company=self.company, + item_code=unreturned_item.name, + target=self.warehouse, + qty=40000, + basic_rate=33.33333, + ) + sales_invoice = self.create_sales_invoice(qty=1, rate=100, do_not_submit=True) + second_item = frappe.copy_doc(sales_invoice.items[0], ignore_no_copy=False) + second_item.item_code = unreturned_item.name + second_item.item_name = unreturned_item.name + second_item.qty = 30000 + sales_invoice.append("items", second_item) + sales_invoice.submit() + + sales_return = make_sales_return(sales_invoice.name) + sales_return.set("items", [sales_return.items[0]]) + sales_return.items[0].qty = -1 + sales_return.submit() + + filters = frappe._dict( + company=sales_invoice.company, + from_date=sales_invoice.posting_date, + to_date=sales_invoice.posting_date, + group_by="Invoice", + ) + _, data = execute(filters=filters) + invoice_row = next( + row + for row in data + if row.parent_invoice == sales_invoice.name and row.item_code == unreturned_item.name + ) + self.assertEqual(invoice_row.qty, 30000) + self.assertEqual(invoice_row.buying_amount, 999999.9) + + def create_drop_ship_order(self, qty=10, selling_rate=100, buying_rate=80): + from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_invoice + from erpnext.selling.doctype.sales_order.sales_order import make_purchase_order + from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order + from erpnext.stock.doctype.item.test_item import make_item + + item = make_item("_Test Drop Ship Item", properties={"is_stock_item": 1, "delivered_by_supplier": 1}) + so = make_sales_order(item=item.name, qty=qty, rate=selling_rate) + purchase_order = make_purchase_order(so.name, selected_items=[so.items[0]])[0] + purchase_order.items[0].rate = buying_rate + purchase_order.supplier = "_Test Supplier" + purchase_order.submit() + make_purchase_invoice(purchase_order.name).submit() + + return so + def create_rate_adjustment_debit_note(self, against_invoice, adjustment_rate, item_code=None): """Create a rate adjustment debit note with no stock movement.""" dn = self.create_sales_invoice(qty=1, rate=adjustment_rate, do_not_save=True, do_not_submit=True) diff --git a/erpnext/accounts/test/test_utils.py b/erpnext/accounts/test/test_utils.py index 9e2725d9b83..d9f843687b2 100644 --- a/erpnext/accounts/test/test_utils.py +++ b/erpnext/accounts/test/test_utils.py @@ -7,6 +7,7 @@ from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_ent from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice from erpnext.accounts.party import get_party_shipping_address from erpnext.accounts.utils import ( + get_currency_precision, get_future_stock_vouchers, get_voucherwise_gl_entries, get_zero_cutoff, @@ -155,3 +156,18 @@ class TestUtils(ERPNextTestSuite): self.assertEqual(get_zero_cutoff(None), 0.005) self.assertEqual(get_zero_cutoff("EUR"), 0.005) self.assertEqual(get_zero_cutoff("BHD"), 0.0005) + + def test_get_currency_precision_respects_zero_and_fallback(self): + currency_precision = frappe.db.get_default("currency_precision") + number_format = frappe.db.get_default("number_format") + + try: + frappe.db.set_default("number_format", "#,###.##") + frappe.db.set_default("currency_precision", "0") + self.assertEqual(get_currency_precision(), 0) + + frappe.db.set_default("currency_precision", "") + self.assertEqual(get_currency_precision(), 2) + finally: + frappe.db.set_default("currency_precision", currency_precision or "") + frappe.db.set_default("number_format", number_format or "#,###.##") diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 37aa943f447..c5feb863f38 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -1189,12 +1189,12 @@ def fix_total_debit_credit(): def get_currency_precision(): - precision = cint(frappe.db.get_default("currency_precision")) - if not precision: - number_format = frappe.db.get_default("number_format") or "#,###.##" - precision = get_number_format_info(number_format)[2] + currency_precision = frappe.db.get_default("currency_precision") + if currency_precision not in (None, ""): + return cint(currency_precision) - return precision + number_format = frappe.db.get_default("number_format") or "#,###.##" + return get_number_format_info(number_format)[2] def get_fraction_units(currency: str) -> int: diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py index 8bbec9e40df..5a7b9995f39 100644 --- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py +++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py @@ -158,6 +158,8 @@ class AssetCapitalization(StockController): if d.meta.has_field(k) and (not d.get(k) or k in force_fields): d.set(k, v) + self.split_valuation_rate_for_grouped_stock_items() + for d in self.asset_items: args = self.as_dict() args.update(d.as_dict()) @@ -179,6 +181,30 @@ class AssetCapitalization(StockController): if d.meta.has_field(k) and (not d.get(k) or k in force_fields): d.set(k, v) + def split_valuation_rate_for_grouped_stock_items(self): + groups = {} + for d in self.stock_items: + if d.item_code and d.warehouse and not (d.serial_no or d.batch_no or d.serial_and_batch_bundle): + groups.setdefault((d.item_code, d.warehouse), []).append(d) + + for rows in groups.values(): + if len(rows) < 2: + continue + + cumulative_qty = 0.0 + prev_cumulative_value = 0.0 + for d in rows: + cumulative_qty += flt(d.stock_qty) + args = self.get_args_for_incoming_rate(d) + args["qty"] = -1 * cumulative_qty + cumulative_rate = flt(get_incoming_rate(args, raise_error_if_no_rate=False)) + cumulative_value = cumulative_rate * cumulative_qty + + row_value = cumulative_value - prev_cumulative_value + d.valuation_rate = flt(row_value / d.stock_qty) if flt(d.stock_qty) else 0.0 + d.amount = flt(flt(d.stock_qty) * d.valuation_rate, d.precision("amount")) + prev_cumulative_value = cumulative_value + def validate_target_item(self): target_item = frappe.get_cached_doc("Item", self.target_item_code) @@ -312,6 +338,8 @@ class AssetCapitalization(StockController): warehouse_details = get_warehouse_details(args) d.update(warehouse_details) + self.split_valuation_rate_for_grouped_stock_items() + @frappe.whitelist() def set_asset_values(self): for d in self.get("asset_items"): diff --git a/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py index e297fc94634..18b2c088d47 100644 --- a/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py +++ b/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py @@ -400,6 +400,33 @@ class TestAssetCapitalization(ERPNextTestSuite): actual_gle = get_actual_gle_dict(asset_capitalization.name) self.assertEqual(actual_gle, {}) + def test_grouped_stock_item_rows_split_fifo_rate(self): + from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse + + company = "_Test Company" + warehouse = create_warehouse("_Test Warehouse for Grouped FIFO Rows", company=company) + item = create_item( + "_Test Grouped FIFO Rows Item", is_stock_item=1, is_fixed_asset=0, is_purchase_item=1 + ) + target_item = create_fixed_asset_item("_Test Grouped FIFO Rows Target Item") + + make_purchase_receipt(item_code=item.item_code, qty=1, rate=100, company=company, warehouse=warehouse) + make_purchase_receipt(item_code=item.item_code, qty=1, rate=200, company=company, warehouse=warehouse) + + asset_capitalization = frappe.new_doc("Asset Capitalization") + asset_capitalization.company = company + asset_capitalization.target_item_code = target_item.name + asset_capitalization.append( + "stock_items", {"item_code": item.item_code, "warehouse": warehouse, "stock_qty": 1} + ) + asset_capitalization.append( + "stock_items", {"item_code": item.item_code, "warehouse": warehouse, "stock_qty": 1} + ) + asset_capitalization.insert() + + rates = [d.valuation_rate for d in asset_capitalization.stock_items] + self.assertEqual(rates, [100, 200]) + def create_asset_capitalization_data(): create_item("Capitalization Target Stock Item", is_stock_item=1, is_fixed_asset=0, is_purchase_item=0) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 47f355dff84..5020fe1ef15 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -388,6 +388,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval:doc.currency && doc.currency != erpnext.get_currency(doc.company)", "fieldname": "currency_and_price_list", "fieldtype": "Section Break", "label": "Currency and Price List", @@ -1323,7 +1324,7 @@ "idx": 105, "is_submittable": 1, "links": [], - "modified": "2026-05-28 12:34:19.659621", + "modified": "2026-08-12 12:00:00.000000", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py index b902a66ee6a..37d9fb06ea2 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -9,13 +9,18 @@ from frappe import _ from frappe.contacts.doctype.contact.contact import get_full_name from frappe.core.doctype.communication.email import make from frappe.desk.form.load import get_attachments +from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc from frappe.query_builder import Order from frappe.utils import get_url from frappe.utils.print_format import download_pdf from frappe.utils.user import get_user_fullname -from erpnext.accounts.party import _get_party_details, get_party_account_currency +from erpnext.accounts.party import ( + _get_party_details, + get_party_account_currency, + validate_party_frozen_disabled, +) from erpnext.buying.utils import validate_for_items from erpnext.controllers.buying_controller import BuyingController from erpnext.stock.doctype.material_request.material_request import set_missing_values @@ -126,6 +131,8 @@ class RequestforQuotation(BuyingController): def validate_supplier_list(self): for d in self.suppliers: + validate_party_frozen_disabled(self.company, "Supplier", d.supplier) + prevent_rfqs = frappe.db.get_value("Supplier", d.supplier, "prevent_rfqs") if prevent_rfqs: standing = frappe.db.get_value("Supplier Scorecard", d.supplier, "status") @@ -483,36 +490,73 @@ def make_supplier_quotation_from_rfq(source_name, target_doc=None, for_supplier= # This method is used to make supplier quotation from supplier's portal. @frappe.whitelist() -def create_supplier_quotation(doc): +def create_supplier_quotation(doc: str | Document | dict): if isinstance(doc, str): doc = json.loads(doc) + supplier = doc.get("supplier") - if frappe.session.user not in frappe.get_all( - "Portal User", {"parent": doc.get("supplier")}, pluck="user" - ): + if frappe.session.user not in frappe.get_all("Portal User", {"parent": supplier}, pluck="user"): frappe.throw(_("Not Permitted"), frappe.PermissionError) - try: - sq_doc = frappe.get_doc( - { - "doctype": "Supplier Quotation", - "supplier": doc.get("supplier"), - "terms": doc.get("terms"), - "company": doc.get("company"), - "currency": doc.get("currency") - or get_party_account_currency("Supplier", doc.get("supplier"), doc.get("company")), - "buying_price_list": doc.get("buying_price_list") - or frappe.db.get_single_value("Buying Settings", "buying_price_list"), - } + validate_existing_supplier_quotation(supplier, doc.get("items")) + + sq_doc = frappe.get_doc( + { + "doctype": "Supplier Quotation", + "supplier": supplier, + "terms": doc.get("terms"), + "company": doc.get("company"), + "currency": doc.get("currency") + or get_party_account_currency("Supplier", supplier, doc.get("company")), + "buying_price_list": doc.get("buying_price_list") + or frappe.db.get_single_value("Buying Settings", "buying_price_list"), + } + ) + add_items(sq_doc, supplier, doc.get("items")) + sq_doc.flags.ignore_permissions = True + sq_doc.run_method("set_missing_values") + sq_doc.save() + frappe.msgprint(_("Supplier Quotation {0} Created").format(sq_doc.name)) + return sq_doc.name + + +def validate_existing_supplier_quotation(supplier, items): + request_for_quotations = {item.get("parent") for item in items if item.get("parent")} + if not request_for_quotations: + return + + rfq = frappe.qb.DocType("Request for Quotation") + ( + frappe.qb.from_(rfq) + .select(rfq.name) + .where(rfq.name.isin(request_for_quotations)) + .orderby(rfq.name) + .for_update() + ).run() + + sq = frappe.qb.DocType("Supplier Quotation") + sqi = frappe.qb.DocType("Supplier Quotation Item") + existing_quotation = ( + frappe.qb.from_(sq) + .inner_join(sqi) + .on(sq.name == sqi.parent) + .select(sq.name, sqi.request_for_quotation) + .where( + (sq.docstatus < 2) + & (sq.supplier == supplier) + & (sqi.request_for_quotation.isin(request_for_quotations)) + ) + .limit(1) + ).run(as_dict=True) + + if existing_quotation: + existing_quotation = existing_quotation[0] + frappe.throw( + _("Supplier Quotation {0} already exists against Request for Quotation {1}").format( + frappe.bold(existing_quotation.name), + frappe.bold(existing_quotation.request_for_quotation), + ) ) - add_items(sq_doc, doc.get("supplier"), doc.get("items")) - sq_doc.flags.ignore_permissions = True - sq_doc.run_method("set_missing_values") - sq_doc.save() - frappe.msgprint(_("Supplier Quotation {0} Created").format(sq_doc.name)) - return sq_doc.name - except Exception: - return None def add_items(sq_doc, supplier, items): diff --git a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py index 36468a83dac..a8b7d997191 100644 --- a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py @@ -17,6 +17,7 @@ from erpnext.buying.doctype.request_for_quotation.request_for_quotation import ( from erpnext.controllers.accounts_controller import InvalidQtyError from erpnext.crm.doctype.opportunity.opportunity import make_request_for_quotation as make_rfq from erpnext.crm.doctype.opportunity.test_opportunity import make_opportunity +from erpnext.exceptions import PartyDisabled from erpnext.stock.doctype.item.test_item import make_item from erpnext.templates.pages.rfq import check_supplier_has_docname_access from erpnext.tests.utils import ERPNextTestSuite @@ -58,6 +59,17 @@ class TestRequestforQuotation(ERPNextTestSuite): self.assertEqual(rfq.get("suppliers")[0].quote_status, "Received") self.assertEqual(rfq.get("suppliers")[1].quote_status, "Pending") + def test_rfq_blocked_for_disabled_supplier(self): + frappe.db.set_value("Supplier", "_Test Supplier", "disabled", 1) + rfq = make_request_for_quotation( + supplier_data=[{"supplier": "_Test Supplier", "supplier_name": "_Test Supplier"}], + do_not_save=True, + ) + self.assertRaises(PartyDisabled, rfq.save) + + frappe.db.set_value("Supplier", "_Test Supplier", "disabled", 0) + rfq.save() + def test_make_supplier_quotation(self): rfq = make_request_for_quotation() @@ -150,6 +162,18 @@ class TestRequestforQuotation(ERPNextTestSuite): self.assertEqual(supplier_quotation_doc.get("items")[0].qty, 5) self.assertEqual(supplier_quotation_doc.get("items")[0].amount, 500) + def test_make_duplicate_supplier_quotation_from_portal(self): + rfq = make_request_for_quotation() + rfq.supplier = rfq.suppliers[0].supplier + supplier_quotation = frappe.get_doc("Supplier Quotation", create_supplier_quotation(rfq)) + supplier_quotation.submit() + + with self.assertRaisesRegex(frappe.ValidationError, "already exists"): + create_supplier_quotation(rfq) + + supplier_quotation.cancel() + self.assertTrue(create_supplier_quotation(rfq)) + def test_make_multi_uom_supplier_quotation(self): item_code = "_Test Multi UOM RFQ Item" if not frappe.db.exists("Item", item_code): diff --git a/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json b/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json index 34ce6200db2..2242aa82c5f 100644 --- a/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json +++ b/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json @@ -40,6 +40,7 @@ "fieldtype": "Link", "in_list_view": 1, "label": "Supplier", + "link_filters": "[[\"Supplier\",\"disabled\",\"=\",0]]", "options": "Supplier", "reqd": 1 }, diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json index a5619bd5f0b..735d3753312 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json @@ -257,6 +257,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval:doc.currency && doc.currency != erpnext.get_currency(doc.company)", "fieldname": "currency_and_price_list", "fieldtype": "Section Break", "label": "Currency and Price List", @@ -947,7 +948,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2026-05-28 12:29:37.509487", + "modified": "2026-08-12 12:00:00.000000", "modified_by": "Administrator", "module": "Buying", "name": "Supplier Quotation", diff --git a/erpnext/buying/print_format/purchase_order_with_item_image/purchase_order_with_item_image.json b/erpnext/buying/print_format/purchase_order_with_item_image/purchase_order_with_item_image.json index c8f9f43bb0b..85746ea47cd 100644 --- a/erpnext/buying/print_format/purchase_order_with_item_image/purchase_order_with_item_image.json +++ b/erpnext/buying/print_format/purchase_order_with_item_image/purchase_order_with_item_image.json @@ -9,7 +9,7 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Supplier Name:\") }}
\n\t\t\t\t\t\t
{{ _(\"Supplier Address:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.supplier_name }}
\n\t\t\t\t\t\t
\n \t\t\t\t\t{% if doc.supplier_address %}\n \t\t\t\t\t\t{% set supplier_address = frappe.db.get_value(\"Address\", doc.supplier_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n {{ doc.supplier_name }}
\n \t\t\t\t\t\t{{ supplier_address.address_line1 or \"\" }}
\n \t\t\t\t\t\t{% if supplier_address.address_line2 %}{{ supplier_address.address_line2 }}
{% endif %}\n \t\t\t\t\t\t{{ supplier_address.city or \"\" }} {{ supplier_address.state or \"\" }} {{ supplier_address.pincode or \"\" }} {{ supplier_address.country or \"\" }}
\n \t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Purchase Order:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.name }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Order Date:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.transaction_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Required By:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.schedule_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}{{ _(\"Rate\") }}{{ _(\"Amount\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}{{ item.get_formatted(\"net_rate\", doc) }}{{ item.get_formatted(\"net_amount\", doc) }}
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- for tax in doc.taxes -%}\n\t\t\t\t\t{%- if (tax.tax_amount or print_settings.print_taxes_with_zero_amount) and (not tax.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) -%}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t\t{%- if doc.apply_discount_on == \"Grand Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ _(\"Sub Total:\") }}{{ doc.get_formatted(\"total\", doc) }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):{{ tax.get_formatted(\"tax_amount\") }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {{ _(\"In Words: \") }}{{ doc.in_words }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ _(\"Grand Total:\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ doc.get_formatted(\"grand_total\", doc) }}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n\t
\n\t\t{% if not no_letterhead and footer %}\n\t\t
\n\t\t\t{{ footer }}\n\t\t
\n\t\t{% endif %}\n\t\t{% if print_settings.repeat_header_footer %}\n\t\t

\n\t\t\t{{ _(\"Page {0} of {1}\").format('', '') }}\n\t\t

\n\t\t{% endif %}\n\t
\n
\n{% endfor %}", + "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Supplier Name:\") }}
\n\t\t\t\t\t\t
{{ _(\"Supplier Address:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.supplier_name }}
\n\t\t\t\t\t\t
\n \t\t\t\t\t{% if doc.supplier_address %}\n \t\t\t\t\t\t{% set supplier_address = frappe.db.get_value(\"Address\", doc.supplier_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n {{ doc.supplier_name }}
\n \t\t\t\t\t\t{{ supplier_address.address_line1 or \"\" }}
\n \t\t\t\t\t\t{% if supplier_address.address_line2 %}{{ supplier_address.address_line2 }}
{% endif %}\n \t\t\t\t\t\t{{ supplier_address.city or \"\" }} {{ supplier_address.state or \"\" }} {{ supplier_address.pincode or \"\" }} {{ supplier_address.country or \"\" }}
\n \t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Purchase Order:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.name }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Order Date:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.transaction_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Required By:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.schedule_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}{{ _(\"Rate\") }}{{ _(\"Amount\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}{{ item.get_formatted(\"net_rate\", doc) }}{{ item.get_formatted(\"net_amount\", doc) }}
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- for tax in doc.taxes -%}\n\t\t\t\t\t{%- if (tax.tax_amount or print_settings.print_taxes_with_zero_amount) and (not tax.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) -%}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t\t{%- if doc.apply_discount_on == \"Grand Total\" -%}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ _(\"Sub Total:\") }}{{ doc.get_formatted(\"total\", doc) }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):{{ tax.get_formatted(\"tax_amount\") }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {{ _(\"In Words: \") }}{{ doc.in_words }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ _(\"Grand Total:\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ doc.get_formatted(\"grand_total\", doc) }}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n\t
\n\t\t{% if not no_letterhead and footer %}\n\t\t
\n\t\t\t{{ footer }}\n\t\t
\n\t\t{% endif %}\n\t\t{% if print_settings.repeat_header_footer %}\n\t\t

\n\t\t\t{{ _(\"Page {0} of {1}\").format('', '') }}\n\t\t

\n\t\t{% endif %}\n\t
\n
\n{% endfor %}", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, diff --git a/erpnext/buying/print_format/request_for_quotation_with_item_image/request_for_quotation_with_item_image.json b/erpnext/buying/print_format/request_for_quotation_with_item_image/request_for_quotation_with_item_image.json index 8ec8d02c73c..bfa936e6f5f 100644 --- a/erpnext/buying/print_format/request_for_quotation_with_item_image/request_for_quotation_with_item_image.json +++ b/erpnext/buying/print_format/request_for_quotation_with_item_image/request_for_quotation_with_item_image.json @@ -9,7 +9,7 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Supplier Name:\") }}
\n\t\t\t\t\t\t
{{ _(\"Shipping Address:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.vendor }}
\n\t\t\t\t\t\t
\n \t\t\t\t\t{% if doc.shipping_address %}\n \t\t\t\t\t\t{% set shipping_address = frappe.db.get_value(\"Address\", doc.shipping_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n {{ doc.shipping_address }}
\n \t\t\t\t\t\t{{ shipping_address.address_line1 or \"\" }}
\n \t\t\t\t\t\t{% if shipping_address.address_line2 %}{{ shipping_address.address_line2 }}
{% endif %}\n \t\t\t\t\t\t{{ shipping_address.city or \"\" }} {{ shipping_address.state or \"\" }} {{ shipping_address.pincode or \"\" }} {{ shipping_address.country or \"\" }}
\n \t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Order Date:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.transaction_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Required By:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.schedule_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n\t
\n\t\t{% if not no_letterhead and footer %}\n\t\t
\n\t\t\t{{ footer }}\n\t\t
\n\t\t{% endif %}\n\t\t{% if print_settings.repeat_header_footer %}\n\t\t

\n\t\t\t{{ _(\"Page {0} of {1}\").format('', '') }}\n\t\t

\n\t\t{% endif %}\n\t
\n
\n{% endfor %}", + "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Supplier Name:\") }}
\n\t\t\t\t\t\t
{{ _(\"Shipping Address:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.vendor }}
\n\t\t\t\t\t\t
\n \t\t\t\t\t{% if doc.shipping_address %}\n \t\t\t\t\t\t{% set shipping_address = frappe.db.get_value(\"Address\", doc.shipping_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n {{ doc.shipping_address }}
\n \t\t\t\t\t\t{{ shipping_address.address_line1 or \"\" }}
\n \t\t\t\t\t\t{% if shipping_address.address_line2 %}{{ shipping_address.address_line2 }}
{% endif %}\n \t\t\t\t\t\t{{ shipping_address.city or \"\" }} {{ shipping_address.state or \"\" }} {{ shipping_address.pincode or \"\" }} {{ shipping_address.country or \"\" }}
\n \t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Order Date:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.transaction_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ _(\"Required By:\") }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.schedule_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\n\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n\t
\n\t\t{% if not no_letterhead and footer %}\n\t\t
\n\t\t\t{{ footer }}\n\t\t
\n\t\t{% endif %}\n\t\t{% if print_settings.repeat_header_footer %}\n\t\t

\n\t\t\t{{ _(\"Page {0} of {1}\").format('', '') }}\n\t\t

\n\t\t{% endif %}\n\t
\n
\n{% endfor %}", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, diff --git a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js index 0df7e0787a9..5073459636e 100644 --- a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js +++ b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js @@ -85,6 +85,17 @@ frappe.query_reports["Supplier Quotation Comparison"] = { ], default: __("Categorize by Supplier"), }, + { + fieldname: "status", + label: __("Status"), + fieldtype: "Select", + options: [ + { label: "", value: "" }, + { label: __("Draft"), value: "Draft" }, + { label: __("Submitted"), value: "Submitted" }, + ], + default: "Submitted", + }, { fieldtype: "Check", label: __("Include Expired"), diff --git a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py index 7c11dda7225..47ce00fa692 100644 --- a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py +++ b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py @@ -58,13 +58,20 @@ def get_data(filters): ) .where( (sq_item.parent == sq.name) - & (sq_item.docstatus < 2) & (sq.company == filters.get("company")) & (sq.transaction_date.between(filters.get("from_date"), filters.get("to_date"))) ) .orderby(sq.transaction_date, sq_item.item_code) ) + # blank -> Draft + Submitted, else filter to the chosen docstatus + if filters.get("status") == "Draft": + query = query.where(sq_item.docstatus == 0) + elif filters.get("status") == "Submitted": + query = query.where(sq_item.docstatus == 1) + else: + query = query.where(sq_item.docstatus < 2) + if filters.get("item_code"): query = query.where(sq_item.item_code == filters.get("item_code")) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index c626f92bffb..a13417065e5 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -738,6 +738,8 @@ class AccountsController(TransactionBase): self.validate_non_invoice_documents_schedule() def before_print(self, settings=None): + self.set_missing_terms() + if self.doctype in [ "Purchase Order", "Sales Order", @@ -761,6 +763,16 @@ class AccountsController(TransactionBase): set_print_templates_for_item_table(self, settings) set_print_templates_for_taxes(self, settings) + def set_missing_terms(self): + if not self.get("tc_name") or self.get("terms"): + return + + from erpnext.setup.doctype.terms_and_conditions.terms_and_conditions import ( + get_terms_and_conditions, + ) + + self.terms = get_terms_and_conditions(self.tc_name, self.as_dict()) + def calculate_paid_amount(self): if hasattr(self, "is_pos") or hasattr(self, "is_paid"): is_paid = self.get("is_pos") or self.get("is_paid") diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index b2e8a73d065..47bb39b1aac 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -85,18 +85,10 @@ class BuyingController(SubcontractingController): ), ) - if ( - self.get("company") - and ( - default_buying_terms := frappe.get_value( - "Company", self.get("company"), "default_buying_terms" - ) - ) - and not self.get("tc_name") - and not self.get("terms") - ): - self.tc_name = default_buying_terms - self.terms = frappe.get_value("Terms and Conditions", self.get("tc_name"), "terms") + if self.get("company") and not self.get("terms"): + if not self.get("tc_name"): + self.tc_name = frappe.get_value("Company", self.company, "default_buying_terms") + self.set_missing_terms() def validate_posting_date_with_po(self): po_list = {x.purchase_order for x in self.items if x.purchase_order} @@ -981,6 +973,14 @@ class BuyingController(SubcontractingController): item.serial_and_batch_bundle, warehouse, type_of_transaction=type_of_transaction ) + def check_purchase_order_on_hold_or_close(self, ref_fieldname, exclude_if_field=None): + if self.get("is_return"): + return + + self.check_for_on_hold_or_closed_status( + "Purchase Order", ref_fieldname, exclude_if_field=exclude_if_field + ) + def update_ordered_and_reserved_qty(self): po_map = {} for d in self.get("items"): @@ -994,7 +994,7 @@ class BuyingController(SubcontractingController): if po and po_item_rows: po_obj = frappe.get_lazy_doc("Purchase Order", po) - if po_obj.status in ["Closed", "Cancelled"]: + if po_obj.status == "Cancelled" or (po_obj.status == "Closed" and not self.get("is_return")): frappe.throw( _("{doctype} {name} is cancelled or closed.").format( doctype=frappe.bold(_("Purchase Order")), diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index f8c54d79043..80e9d48d15e 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -214,7 +214,7 @@ def validate_quantity(doc, key, args, ref, valid_items, already_returned_items): else 0 ) - if column == "stock_qty" and not args.get("return_qty_from_rejected_warehouse"): + if column in ("stock_qty", "qty") and not args.get("return_qty_from_rejected_warehouse"): reference_qty = ref.get(column) current_stock_qty = args.get(column) elif args.get("return_qty_from_rejected_warehouse"): diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 51c821df93f..d11c024102b 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -43,18 +43,10 @@ class SellingController(StockController): ), ) - if ( - self.get("company") - and ( - default_selling_terms := frappe.get_value( - "Company", self.get("company"), "default_selling_terms" - ) - ) - and not self.get("tc_name") - and not self.get("terms") - ): - self.tc_name = default_selling_terms - self.terms = frappe.get_value("Terms and Conditions", self.get("tc_name"), "terms") + if self.get("company") and not self.get("terms"): + if not self.get("tc_name"): + self.tc_name = frappe.get_value("Company", self.company, "default_selling_terms") + self.set_missing_terms() def validate(self): super().validate() @@ -573,12 +565,12 @@ class SellingController(StockController): reset_incoming_rate() if ( - not d.incoming_rate + (not d.incoming_rate or self.is_new()) + and not is_standalone or self.is_internal_transfer() or ( get_valuation_method(d.item_code, self.company) == "Moving Average" and self.get("is_return") - and not is_standalone ) ): d.incoming_rate = get_incoming_rate( diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 6567d10fb4e..32f35502a52 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -75,7 +75,7 @@ SECONDARY_ITEM_PURPOSES = ("Manufacture", "Repack", "Disassemble") def is_inspection_exempt_secondary_row(doc, row) -> bool: """Whether the row is a secondary item on a document that produces secondary items.""" - if not (row.get("type") or row.get("is_legacy_scrap_item")): + if not (row.get("secondary_item_type") or row.get("is_legacy_scrap_item")): return False if doc.doctype == "Stock Entry": @@ -86,7 +86,9 @@ def is_inspection_exempt_secondary_row(doc, row) -> bool: def stock_entry_row_requires_inspection(purpose, row): """Check if this Stock Entry row need a Quality Inspection.""" - if purpose in SECONDARY_ITEM_PURPOSES and (row.get("type") or row.get("is_legacy_scrap_item")): + if purpose in SECONDARY_ITEM_PURPOSES and ( + row.get("secondary_item_type") or row.get("is_legacy_scrap_item") + ): return False if purpose == "Manufacture": return bool(row.is_finished_item) diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py index 53c3c47a135..c2de65ce720 100644 --- a/erpnext/controllers/subcontracting_controller.py +++ b/erpnext/controllers/subcontracting_controller.py @@ -161,7 +161,7 @@ class SubcontractingController(StockController): ).format(item.idx, get_link_to_form("Item", item.item_code)) ) - if not item.get("type") and not item.get("is_legacy_scrap_item"): + if not item.get("secondary_item_type") and not item.get("is_legacy_scrap_item"): if not is_sub_contracted_item: frappe.throw( _("Row {0}: Item {1} must be a subcontracted item.").format(item.idx, item.item_name) @@ -1288,10 +1288,10 @@ class SubcontractingController(StockController): total_amt = sum( flt(item.amount) for item in self.get("items") - if not item.get("type") and not item.get("is_legacy_scrap_item") + if not item.get("secondary_item_type") and not item.get("is_legacy_scrap_item") ) for item in self.items: - if not item.get("type") and not item.get("is_legacy_scrap_item"): + if not item.get("secondary_item_type") and not item.get("is_legacy_scrap_item"): item.additional_cost_per_qty = ( (item.amount * self.total_additional_costs) / total_amt ) / item.qty @@ -1299,15 +1299,15 @@ class SubcontractingController(StockController): total_qty = sum( flt(item.qty) for item in self.get("items") - if not item.get("type") and not item.get("is_legacy_scrap_item") + if not item.get("secondary_item_type") and not item.get("is_legacy_scrap_item") ) additional_cost_per_qty = self.total_additional_costs / total_qty for item in self.items: - if not item.get("type") and not item.get("is_legacy_scrap_item"): + if not item.get("secondary_item_type") and not item.get("is_legacy_scrap_item"): item.additional_cost_per_qty = additional_cost_per_qty else: for item in self.items: - if not item.get("type") and not item.get("is_legacy_scrap_item"): + if not item.get("secondary_item_type") and not item.get("is_legacy_scrap_item"): item.additional_cost_per_qty = 0 @frappe.whitelist() diff --git a/erpnext/controllers/subcontracting_inward_controller.py b/erpnext/controllers/subcontracting_inward_controller.py index 8e0aa56052d..bc57ba15224 100644 --- a/erpnext/controllers/subcontracting_inward_controller.py +++ b/erpnext/controllers/subcontracting_inward_controller.py @@ -241,7 +241,7 @@ class SubcontractingInwardController: item for item in self.get("items") if not item.is_finished_item - and not item.type + and not item.secondary_item_type and not item.is_legacy_scrap_item and frappe.get_cached_value("Item", item.item_code, "is_customer_provided_item") ] @@ -372,7 +372,7 @@ class SubcontractingInwardController: if self.purpose in ["Subcontracting Delivery", "Subcontracting Return", "Manufacture"]: for item in self.items: if ( - item.is_finished_item or item.type or item.is_legacy_scrap_item + item.is_finished_item or item.secondary_item_type or item.is_legacy_scrap_item ) and item.valuation_rate == 0: item.allow_zero_valuation_rate = 1 @@ -472,7 +472,7 @@ class SubcontractingInwardController: self.validate_delivery_on_save() else: for item in self.items: - if not item.type and not item.is_legacy_scrap_item: + if not item.secondary_item_type and not item.is_legacy_scrap_item: delivered_qty, returned_qty = frappe.get_value( "Subcontracting Inward Order Item", item.scio_detail, @@ -543,7 +543,7 @@ class SubcontractingInwardController: bold( frappe.get_cached_value( "Subcontracting Inward Order Item" - if not item.type and not item.is_legacy_scrap_item + if not item.secondary_item_type and not item.is_legacy_scrap_item else "Subcontracting Inward Order Secondary Item", item.scio_detail, "stock_uom", @@ -595,7 +595,7 @@ class SubcontractingInwardController: ) for item in [item for item in self.items if not item.is_finished_item]: - if item.type or item.is_legacy_scrap_item: + if item.secondary_item_type or item.is_legacy_scrap_item: scio_secondary_item = frappe.get_value( "Subcontracting Inward Order Secondary Item", { @@ -655,7 +655,7 @@ class SubcontractingInwardController: for item in self.items: doctype = ( "Subcontracting Inward Order Item" - if not item.type and not item.is_legacy_scrap_item + if not item.secondary_item_type and not item.is_legacy_scrap_item else "Subcontracting Inward Order Secondary Item" ) qty_map[doctype][item.scio_detail] += ( @@ -791,7 +791,7 @@ class SubcontractingInwardController: items = [ item for item in self.items - if not item.is_finished_item and not item.type and not item.is_legacy_scrap_item + if not item.is_finished_item and not item.secondary_item_type and not item.is_legacy_scrap_item ] item_code_wh = frappe._dict( { @@ -893,7 +893,9 @@ class SubcontractingInwardController: def update_inward_order_secondary_items(self): if (scio := self.subcontracting_inward_order) and self.purpose == "Manufacture": - secondary_items_list = [item for item in self.items if item.type or item.is_legacy_scrap_item] + secondary_items_list = [ + item for item in self.items if item.secondary_item_type or item.is_legacy_scrap_item + ] secondary_items = defaultdict(float) for item in secondary_items_list: @@ -967,7 +969,7 @@ class SubcontractingInwardController: stock_uom=secondary_item.stock_uom, warehouse=secondary_item.t_warehouse, produced_qty=secondary_item.transfer_qty, - type=secondary_item.type, + secondary_item_type=secondary_item.secondary_item_type, delivered_qty=0, reference_name=frappe.get_value( "Work Order", self.work_order, "subcontracting_inward_order_item" diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index e50a34e2f14..f8f6217e050 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -314,33 +314,32 @@ class calculate_taxes_and_totals: for item in self.doc.items: item._unrounded_net_amount = None item_tax_map = self._load_item_tax_rate(item.item_tax_rate) - cumulated_tax_fraction = 0 - total_inclusive_tax_amount_per_qty = 0 + total_tax_slope = 0 + total_tax_intercept = 0 for i, tax in enumerate(self.doc.get("taxes")): ( tax.tax_fraction_for_current_item, - inclusive_tax_amount_per_qty, - ) = self.get_current_tax_fraction(tax, item_tax_map) + tax_intercept_per_qty, + ) = self.get_current_tax_fraction(tax, item_tax_map, item) + tax.inclusive_amount_per_qty = tax_intercept_per_qty if i == 0: tax.grand_total_fraction_for_current_item = 1 + tax.tax_fraction_for_current_item + tax.grand_total_amount_per_qty = tax_intercept_per_qty else: + prev = self.doc.get("taxes")[i - 1] tax.grand_total_fraction_for_current_item = ( - self.doc.get("taxes")[i - 1].grand_total_fraction_for_current_item - + tax.tax_fraction_for_current_item + prev.grand_total_fraction_for_current_item + tax.tax_fraction_for_current_item ) + tax.grand_total_amount_per_qty = prev.grand_total_amount_per_qty + tax_intercept_per_qty - cumulated_tax_fraction += tax.tax_fraction_for_current_item - total_inclusive_tax_amount_per_qty += inclusive_tax_amount_per_qty * flt(item.qty) + total_tax_slope += tax.tax_fraction_for_current_item + total_tax_intercept += tax_intercept_per_qty * flt(item.qty) - if ( - not self.discount_amount_applied - and item.qty - and (cumulated_tax_fraction or total_inclusive_tax_amount_per_qty) - ): - amount = flt(item.amount) - total_inclusive_tax_amount_per_qty + if not self.discount_amount_applied and item.qty and (total_tax_slope or total_tax_intercept): + amount = flt(item.amount) - total_tax_intercept - item._unrounded_net_amount = amount / (1 + cumulated_tax_fraction) + item._unrounded_net_amount = amount / (1 + total_tax_slope) item.net_amount = flt(item._unrounded_net_amount, item.precision("net_amount")) item.net_rate = flt(item.net_amount / item.qty, item.precision("net_rate")) item.discount_percentage = flt( @@ -352,41 +351,48 @@ class calculate_taxes_and_totals: def _load_item_tax_rate(self, item_tax_rate): return json.loads(item_tax_rate) if item_tax_rate else {} - def get_current_tax_fraction(self, tax, item_tax_map): + def get_current_tax_fraction(self, tax, item_tax_map, item): """ - Get tax fraction for calculating tax exclusive amount - from tax inclusive amount + tax = slope * net + intercept. + Returns (slope, intercept_per_qty) """ - current_tax_fraction = 0 - inclusive_tax_amount_per_qty = 0 + tax_slope = 0 + tax_intercept = 0 if cint(tax.included_in_print_rate): tax_rate = self._get_tax_rate(tax, item_tax_map) if tax_rate == NOT_APPLICABLE_TAX: - return current_tax_fraction, inclusive_tax_amount_per_qty + return tax_slope, tax_intercept if tax.charge_type == "On Net Total": - current_tax_fraction = tax_rate / 100.0 + tax_slope = tax_rate / 100.0 elif tax.charge_type == "On Previous Row Amount": - current_tax_fraction = (tax_rate / 100.0) * self.doc.get("taxes")[ - cint(tax.row_id) - 1 - ].tax_fraction_for_current_item + row = self.doc.get("taxes")[cint(tax.row_id) - 1] + tax_slope = (tax_rate / 100.0) * row.tax_fraction_for_current_item + tax_intercept = (tax_rate / 100.0) * flt(getattr(row, "inclusive_amount_per_qty", 0)) elif tax.charge_type == "On Previous Row Total": - current_tax_fraction = (tax_rate / 100.0) * self.doc.get("taxes")[ - cint(tax.row_id) - 1 - ].grand_total_fraction_for_current_item + row = self.doc.get("taxes")[cint(tax.row_id) - 1] + tax_slope = (tax_rate / 100.0) * row.grand_total_fraction_for_current_item + tax_intercept = (tax_rate / 100.0) * flt(getattr(row, "grand_total_amount_per_qty", 0)) elif tax.charge_type == "On Item Quantity": - inclusive_tax_amount_per_qty = flt(tax_rate) + tax_intercept = flt(tax_rate) + + else: + # Custom charge_type: the rate applies to a resolved (fixed) base, + # e.g. a tax on MRP included in the printed price. + qty = flt(item.qty) or 1 + base = self.get_item_taxable_base(item, tax) + tax_intercept = (tax_rate / 100.0) * base / qty if getattr(tax, "add_deduct_tax", None) and tax.add_deduct_tax == "Deduct": - current_tax_fraction *= -1.0 - inclusive_tax_amount_per_qty *= -1.0 + tax_slope *= -1.0 + tax_intercept *= -1.0 - return current_tax_fraction, inclusive_tax_amount_per_qty + return tax_slope, tax_intercept def _get_tax_rate(self, tax, item_tax_map): if tax.account_head in item_tax_map: @@ -612,7 +618,6 @@ class calculate_taxes_and_totals: elif tax.charge_type == "On Net Total": if tax.account_head in item_tax_map: current_net_amount = item.net_amount - # Use unrounded net for inclusive taxes to avoid double rounding if ( cint(tax.included_in_print_rate) @@ -631,12 +636,46 @@ class calculate_taxes_and_totals: elif tax.charge_type == "On Item Quantity": # don't sum current net amount due to the field being a currency field current_tax_amount = tax_rate * item.qty + else: + # Custom charge_type: rate applies to the resolver-provided base. + base = self.get_item_taxable_base(item, tax) + current_net_amount = base + current_tax_amount = (tax_rate / 100.0) * base if not tax.get("dont_recompute_tax"): self.set_item_wise_tax(item, tax, tax_rate, current_tax_amount, current_net_amount) return current_net_amount, current_tax_amount + def get_item_taxable_base(self, item, tax): + """Per-item base a custom charge_type's rate is applied to. + + Override the base (gross, MRP, net of other taxes, …) via the + `erpnext_taxable_base_resolvers` hook + + Register a resolver in `hooks.py`, keyed by charge_type: + + erpnext_taxable_base_resolvers = {"On Gross Amount": "my_app.taxes.gross_base"} + + It receives (calc, item, tax) — calc is this instance, calc.doc the parent — + and returns the base (flt-coerced by the caller): + + def gross_base(calc, item, tax): + return item.custom_field_mrp * item.qty + + A resolver may stamp transient attributes on `item`; it can be called more than once + per item, so such stamping must be idempotent. + """ + resolvers = frappe.get_hooks("erpnext_taxable_base_resolvers") or {} + path = resolvers.get(tax.charge_type) + + if path: + method = path[-1] if isinstance(path, list | tuple) else path + return flt(frappe.get_attr(method)(self, item, tax)) + + # fallback + return flt(item.net_amount) + def set_item_wise_tax(self, item, tax, tax_rate, current_tax_amount, current_net_amount): # store tax breakup for each item multiplier = -1 if tax.get("add_deduct_tax") == "Deduct" else 1 diff --git a/erpnext/controllers/tests/test_sales_and_purchase_return.py b/erpnext/controllers/tests/test_sales_and_purchase_return.py index e60ca29fed3..8294688a317 100644 --- a/erpnext/controllers/tests/test_sales_and_purchase_return.py +++ b/erpnext/controllers/tests/test_sales_and_purchase_return.py @@ -88,3 +88,35 @@ class TestSalesAndPurchaseReturn(ERPNextTestSuite): return_si.items[0].qty = 0 self.assertRaises(frappe.ValidationError, return_si.save) + + def test_sales_invoice_partial_return_with_different_stock_uom(self): + from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice + from erpnext.controllers.sales_and_purchase_return import make_return_doc + from erpnext.stock.doctype.item.test_item import make_item + + item_properties = {"is_stock_item": 1, "stock_uom": "Kg"} + if frappe.get_meta("Item").has_field("gst_hsn_code") and frappe.db.exists("GST HSN Code", "010121"): + item_properties["gst_hsn_code"] = "010121" + + item = make_item( + "_Test SI Return Different Stock UOM", + item_properties, + uoms=[{"uom": "Nos", "conversion_factor": 0.013888889}], + ) + + si = create_sales_invoice(item_code=item.name, qty=48, do_not_save=True) + si.items[0].uom = "Nos" + si.items[0].stock_uom = "Kg" + si.items[0].conversion_factor = 0.013888889 + si.save().submit() + self.addCleanup(self._cancel_and_delete, "Sales Invoice", si.name) + + first_return = make_return_doc(si.doctype, si.name) + first_return.items[0].qty = -24 + first_return.save().submit() + self.addCleanup(self._cancel_and_delete, "Sales Invoice", first_return.name) + + second_return = make_return_doc(si.doctype, si.name) + self.assertEqual(second_return.items[0].qty, -24) + second_return.save().submit() + self.addCleanup(self._cancel_and_delete, "Sales Invoice", second_return.name) diff --git a/erpnext/controllers/tests/test_taxes_and_totals.py b/erpnext/controllers/tests/test_taxes_and_totals.py index 54067c4ce22..90eba36bcd7 100644 --- a/erpnext/controllers/tests/test_taxes_and_totals.py +++ b/erpnext/controllers/tests/test_taxes_and_totals.py @@ -1,12 +1,24 @@ +from unittest import mock from unittest.mock import patch import frappe +from frappe.utils import flt from erpnext.controllers.taxes_and_totals import calculate_taxes_and_totals from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order from erpnext.tests.utils import ERPNextTestSuite +def resolve_on_gross(calc, item, tax): + # base = gross printed line amount + return flt(item.amount) + + +def resolve_on_mrp(calc, item, tax): + # base = MRP, not net + return flt(item.price_list_rate) * flt(item.qty) + + class TestTaxesAndTotals(ERPNextTestSuite): def test_regional_round_off_accounts(self): """ @@ -30,6 +42,93 @@ class TestTaxesAndTotals(ERPNextTestSuite): self.assertIn(test_account, frappe.flags.round_off_applicable_accounts) + def test_exclusive_custom_charge_on_resolved_base(self): + """Added (exclusive) custom charge_type whose base is resolved by the + `erpnext_taxable_base_resolvers` hook. IPI 10% on the gross product value 1000 + -> tax 100, net 1000, grand 1100.""" + so = make_sales_order(do_not_save=True) + so.items = [] + so.append( + "items", + { + "item_code": "_Test Item", + "qty": 1, + "rate": 1000, + "price_list_rate": 1000, + "warehouse": "_Test Warehouse - _TC", + }, + ) + so.set("taxes", []) + so.append( + "taxes", + { + "charge_type": "On Gross Value", + "account_head": "_Test Account Excise Duty - _TC", + "description": "IPI 10% on gross product value", + "rate": 10, + "cost_center": "_Test Cost Center - _TC", + }, + ) + + real_get_hooks = frappe.get_hooks + + def fake_get_hooks(hook=None, *args, **kwargs): + if hook == "erpnext_taxable_base_resolvers": + return { + "On Gross Value": ["erpnext.controllers.tests.test_taxes_and_totals.resolve_on_gross"] + } + return real_get_hooks(hook, *args, **kwargs) + + with mock.patch("frappe.get_hooks", side_effect=fake_get_hooks): + calculate_taxes_and_totals(so) + + self.assertEqual(so.net_total, 1000.0) + self.assertEqual(so.taxes[0].tax_amount, 100.0) + self.assertEqual(so.grand_total, 1100.0) + + def test_inclusive_custom_charge_on_resolved_base(self): + """Inclusive custom charge on a resolved base backs out non-compounding + (tax = rate x resolved base) — a resolved base is fixed, so it never + compounds. MRP 1200, printed 1000, rate 10%: tax 120, net 880.""" + so = make_sales_order(do_not_save=True) + so.items = [] + so.append( + "items", + { + "item_code": "_Test Item", + "qty": 1, + "rate": 1000, + "price_list_rate": 1200, + "warehouse": "_Test Warehouse - _TC", + }, + ) + so.set("taxes", []) + so.append( + "taxes", + { + "charge_type": "On MRP", + "account_head": "_Test Account VAT - _TC", + "description": "Tax 10% on MRP, inclusive", + "rate": 10, + "included_in_print_rate": 1, + "cost_center": "_Test Cost Center - _TC", + }, + ) + + real_get_hooks = frappe.get_hooks + + def fake_get_hooks(hook=None, *args, **kwargs): + if hook == "erpnext_taxable_base_resolvers": + return {"On MRP": ["erpnext.controllers.tests.test_taxes_and_totals.resolve_on_mrp"]} + return real_get_hooks(hook, *args, **kwargs) + + with mock.patch("frappe.get_hooks", side_effect=fake_get_hooks): + calculate_taxes_and_totals(so) + + self.assertEqual(so.taxes[0].tax_amount, 120.0) + self.assertEqual(so.net_total, 880.0) + self.assertEqual(so.grand_total, 1000.0) + def test_disabling_rounded_total_resets_base_fields(self): """Disabling rounded total should also clear base rounded values.""" so = make_sales_order(do_not_save=True) diff --git a/erpnext/crm/doctype/crm_settings/crm_settings.py b/erpnext/crm/doctype/crm_settings/crm_settings.py index 379c55ae5b3..73c0156e291 100644 --- a/erpnext/crm/doctype/crm_settings/crm_settings.py +++ b/erpnext/crm/doctype/crm_settings/crm_settings.py @@ -69,6 +69,13 @@ class CRMSettings(Document): self.allowed_users = [] def custom_fields_for_frappe_crm_data_sync(self): + custom_fields = self.get_frappe_crm_custom_fields() + + if self.enable_frappe_crm_data_synchronization: + create_custom_fields(custom_fields, ignore_validate=True) + + @staticmethod + def get_frappe_crm_custom_fields(): custom_fields = { "Quotation": [ { @@ -88,4 +95,4 @@ class CRMSettings(Document): ], } - create_custom_fields(custom_fields, ignore_validate=True) + return custom_fields diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py index 6245c2755d2..f3bb41dfcf4 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.py +++ b/erpnext/crm/doctype/opportunity/opportunity.py @@ -13,6 +13,7 @@ from frappe.query_builder import DocType, Interval from frappe.query_builder.functions import Now from frappe.utils import flt, get_fullname +from erpnext.accounts.party import validate_party_frozen_disabled from erpnext.crm.utils import ( CRMNote, copy_comments, @@ -133,6 +134,7 @@ class Opportunity(TransactionBase, CRMNote): self.validate_item_details() self.validate_uom_is_integer("uom", "qty") self.validate_cust_name() + self.validate_party() self.map_fields() self.validate_qty() self.set_exchange_rate() @@ -348,6 +350,10 @@ class Opportunity(TransactionBase, CRMNote): return False return True + def validate_party(self) -> None: + if self.opportunity_from == "Customer": + validate_party_frozen_disabled(self.company, "Customer", self.party_name) + def validate_cust_name(self): if self.party_name: if self.opportunity_from == "Customer": diff --git a/erpnext/crm/doctype/opportunity/test_opportunity.py b/erpnext/crm/doctype/opportunity/test_opportunity.py index caf94a044cb..90a6be0943b 100644 --- a/erpnext/crm/doctype/opportunity/test_opportunity.py +++ b/erpnext/crm/doctype/opportunity/test_opportunity.py @@ -9,6 +9,7 @@ from erpnext.crm.doctype.lead.lead import make_customer from erpnext.crm.doctype.lead.test_lead import make_lead from erpnext.crm.doctype.opportunity.opportunity import make_quotation from erpnext.crm.utils import get_linked_communication_list +from erpnext.exceptions import PartyDisabled from erpnext.tests.utils import ERPNextTestSuite @@ -71,6 +72,23 @@ class TestOpportunity(ERPNextTestSuite): opportunity_doc = make_opportunity(with_items=1, rate=1100, qty=2) self.assertEqual(opportunity_doc.total, 2200) + def test_disabled_customer_not_allowed(self): + frappe.db.set_value("Customer", "_Test Customer", "disabled", 1) + + self.assertRaises(PartyDisabled, make_opportunity, with_items=0) + + frappe.db.set_value("Customer", "_Test Customer", "disabled", 0) + make_opportunity(with_items=0) + + def test_disabled_lead_not_blocked(self): + # Lead.disabled isn't enforced anywhere else (e.g. the Lead picker query only + # excludes Converted leads), so it shouldn't block Opportunity creation either. + lead_doc = make_lead() + frappe.db.set_value("Lead", lead_doc.name, "disabled", 1) + + opp_doc = make_opportunity(opportunity_from="Lead", lead=lead_doc.name) + self.assertEqual(opp_doc.party_name, lead_doc.name) + def test_carry_forward_of_email_and_comments(self): frappe.db.set_single_value("CRM Settings", "carry_forward_communication_and_comments", 1) lead_doc = make_lead() diff --git a/erpnext/crm/doctype/utils.py b/erpnext/crm/doctype/utils.py index c42db1757b9..f3230e36568 100644 --- a/erpnext/crm/doctype/utils.py +++ b/erpnext/crm/doctype/utils.py @@ -1,53 +1,6 @@ import frappe -@frappe.whitelist() -def get_last_interaction(contact=None, lead=None): - if not contact and not lead: - return - - last_communication = None - last_issue = None - if contact: - query_condition = "" - values = [] - contact = frappe.get_doc("Contact", contact) - for link in contact.links: - if link.link_doctype == "Customer": - last_issue = get_last_issue_from_customer(link.link_name) - query_condition += "(`reference_doctype`=%s AND `reference_name`=%s) OR" - values += [link.link_doctype, link.link_name] - - if query_condition: - # remove extra appended 'OR' - query_condition = query_condition[:-2] - last_communication = frappe.db.sql( - f""" - SELECT `name`, `content` - FROM `tabCommunication` - WHERE `sent_or_received`='Received' - AND ({query_condition}) - ORDER BY `creation` - LIMIT 1 - """, - values, - as_dict=1, - ) # nosec - - if lead: - last_communication = frappe.get_all( - "Communication", - filters={"reference_doctype": "Lead", "reference_name": lead, "sent_or_received": "Received"}, - fields=["name", "content"], - order_by="`creation` DESC", - limit=1, - ) - - last_communication = last_communication[0] if last_communication else None - - return {"last_communication": last_communication, "last_issue": last_issue} - - def get_last_issue_from_customer(customer_name): issues = frappe.get_all( "Issue", diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 4ce4e8047f6..a4fc6766108 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -619,16 +619,16 @@ regional_overrides = { "erpnext.controllers.accounts_controller.validate_regional": "erpnext.regional.italy.utils.sales_invoice_validate", }, } -user_privacy_documents = [ +user_data_fields = [ { "doctype": "Lead", - "match_field": "email_id", - "personal_fields": ["phone", "mobile_no", "fax", "website", "lead_name"], + "filter_by": "email_id", + "redact_fields": ["phone", "mobile_no", "fax", "website", "lead_name"], }, { "doctype": "Opportunity", - "match_field": "contact_email", - "personal_fields": ["contact_mobile", "contact_display", "customer_name"], + "filter_by": "contact_email", + "redact_fields": ["contact_mobile", "contact_display", "customer_name"], }, ] diff --git a/erpnext/locale/main.pot b/erpnext/locale/main.pot index 6ce1377b298..389d37be3ff 100644 --- a/erpnext/locale/main.pot +++ b/erpnext/locale/main.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ERPNext VERSION\n" "Report-Msgid-Bugs-To: hello@frappe.io\n" -"POT-Creation-Date: 2026-08-09 09:47+0000\n" -"PO-Revision-Date: 2026-08-09 09:47+0000\n" +"POT-Creation-Date: 2026-08-23 09:41+0000\n" +"PO-Revision-Date: 2026-08-23 09:41+0000\n" "Last-Translator: hello@frappe.io\n" "Language-Team: hello@frappe.io\n" "MIME-Version: 1.0\n" @@ -106,7 +106,7 @@ msgstr "" msgid "\"Is Fixed Asset\" cannot be unchecked, as Asset record exists against the item" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:273 +#: erpnext/public/js/utils/serial_no_batch_selector.js:283 msgid "\"SN-01::10\" for \"SN-01\" to \"SN-10\"" msgstr "" @@ -166,7 +166,7 @@ msgstr "" msgid "% Delivered" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:1026 +#: erpnext/manufacturing/doctype/bom/bom.js:1028 #, python-format msgid "% Finished Item Quantity" msgstr "" @@ -271,11 +271,11 @@ msgstr "" msgid "% of materials delivered against this Sales Order" msgstr "" -#: erpnext/controllers/accounts_controller.py:2419 +#: erpnext/controllers/accounts_controller.py:2455 msgid "'Account' in the Accounting section of Customer {0}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:362 +#: erpnext/selling/doctype/sales_order/sales_order.py:363 msgid "'Allow Multiple Sales Orders Against a Customer's Purchase Order'" msgstr "" @@ -287,7 +287,7 @@ msgstr "" msgid "'Days Since Last Order' must be greater than or equal to zero" msgstr "" -#: erpnext/controllers/accounts_controller.py:2424 +#: erpnext/controllers/accounts_controller.py:2460 msgid "'Default {0} Account' in Company {1}" msgstr "" @@ -619,8 +619,8 @@ msgstr "" msgid "90 Above" msgstr "" -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1298 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1299 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1330 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1331 msgid "<0" msgstr "" @@ -800,7 +800,7 @@ msgstr "" msgid "
  • Clearance date must be after cheque date for row(s): {0}
  • " msgstr "" -#: erpnext/controllers/accounts_controller.py:2302 +#: erpnext/controllers/accounts_controller.py:2338 msgid "
  • Item {0} in row(s) {1} billed more than {2}
  • " msgstr "" @@ -817,7 +817,7 @@ msgstr "" msgid "
  • {}
  • " msgstr "" -#: erpnext/controllers/accounts_controller.py:2299 +#: erpnext/controllers/accounts_controller.py:2335 msgid "

    Cannot overbill for the following Items:

    " msgstr "" @@ -862,7 +862,7 @@ msgstr "" msgid "

    Price List Rate has not been set as editable in Selling Settings. In this scenario, setting Update Price List Based On to Price List Rate will prevent auto-updation of Item Price.

    Are you sure you want to continue?" msgstr "" -#: erpnext/controllers/accounts_controller.py:2311 +#: erpnext/controllers/accounts_controller.py:2347 msgid "

    To allow over-billing, please set allowance in Accounts Settings.

    " msgstr "" @@ -955,6 +955,10 @@ msgstr "" msgid "Outstanding Amount: {0}" msgstr "" +#: erpnext/public/js/utils/serial_no_batch_selector.js:690 +msgid "Total qty of the rows ({0}) does not match the Qty to Fetch ({1}). Qty of the item will be changed to {0}. Are you sure want to proceed?" +msgstr "" + #. Content of the 'html_19' (HTML) field in DocType 'Inventory Dimension' #: erpnext/stock/doctype/inventory_dimension/inventory_dimension.json msgid "" @@ -1040,7 +1044,7 @@ msgstr "" msgid "A Reconciliation Job {0} is running for the same filters. Cannot reconcile now" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1783 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1797 msgid "A Reverse Journal Entry {0} already exists for this Journal Entry." msgstr "" @@ -1081,7 +1085,7 @@ msgstr "" msgid "A logical Warehouse against which stock entries are made." msgstr "" -#: erpnext/stock/serial_batch_bundle.py:1565 +#: erpnext/stock/serial_batch_bundle.py:1568 msgid "A naming series conflict occurred while creating serial numbers. Please change the naming series for the item {0}." msgstr "" @@ -1118,7 +1122,7 @@ msgstr "" msgid "A third party distributor / dealer / commission agent / affiliate / reseller who sells the companies products for a commission." msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:70 +#: erpnext/crm/doctype/appointment/appointment.py:71 msgid "A verified appointment cannot be moved back to 'Unverified' status." msgstr "" @@ -1211,7 +1215,7 @@ msgstr "" msgid "Abbreviation: {0} must appear only once" msgstr "" -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1295 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1327 msgid "Above" msgstr "" @@ -1265,7 +1269,7 @@ msgid "Accepted Qty in Stock UOM" msgstr "" #. Label of the qty (Float) field in DocType 'Purchase Receipt Item' -#: erpnext/public/js/controllers/transaction.js:2875 +#: erpnext/public/js/controllers/transaction.js:2879 #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json msgid "Accepted Quantity" msgstr "" @@ -1301,7 +1305,7 @@ msgstr "" msgid "According to CEFACT/ICG/2010/IC013 or CEFACT/ICG/2010/IC010" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1290 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1295 msgid "According to the BOM {0}, the Item '{1}' is missing in the stock entry." msgstr "" @@ -1425,7 +1429,7 @@ msgid "Account Manager" msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1063 -#: erpnext/controllers/accounts_controller.py:2428 +#: erpnext/controllers/accounts_controller.py:2464 msgid "Account Missing" msgstr "" @@ -1665,7 +1669,7 @@ msgstr "" msgid "Account {0} is frozen" msgstr "" -#: erpnext/controllers/accounts_controller.py:1503 +#: erpnext/controllers/accounts_controller.py:1539 msgid "Account {0} is invalid. Account Currency must be {1}" msgstr "" @@ -1701,7 +1705,7 @@ msgstr "" msgid "Account: {0} is not permitted under Payment Entry" msgstr "" -#: erpnext/controllers/accounts_controller.py:3312 +#: erpnext/controllers/accounts_controller.py:3348 msgid "Account: {0} with currency: {1} can not be selected" msgstr "" @@ -1982,12 +1986,12 @@ msgstr "" #: erpnext/assets/doctype/asset/asset.py:941 #: erpnext/assets/doctype/asset/asset.py:956 -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:546 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:574 msgid "Accounting Entry for Asset" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2396 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2416 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2470 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2490 msgid "Accounting Entry for LCV in Stock Entry {0}" msgstr "" @@ -1995,33 +1999,33 @@ msgstr "" msgid "Accounting Entry for Landed Cost Voucher for SCR {0}" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:833 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:837 msgid "Accounting Entry for Service" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1056 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1077 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1095 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1116 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1137 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1165 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1277 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1542 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1564 -#: erpnext/controllers/stock_controller.py:787 -#: erpnext/controllers/stock_controller.py:804 -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:930 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2341 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2355 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1096 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1117 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1135 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1156 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1177 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1205 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1317 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1582 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1604 +#: erpnext/controllers/stock_controller.py:798 +#: erpnext/controllers/stock_controller.py:815 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:934 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2415 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2429 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:753 msgid "Accounting Entry for Stock" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:729 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:730 msgid "Accounting Entry for {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:2469 +#: erpnext/controllers/accounts_controller.py:2505 msgid "Accounting Entry for {0}: {1} can only be made in currency: {2}" msgstr "" @@ -2091,7 +2095,7 @@ msgstr "" #: erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.json #: erpnext/assets/doctype/asset_category/asset_category.json #: erpnext/setup/doctype/company/company.json -#: erpnext/setup/doctype/company/company.py:448 +#: erpnext/setup/doctype/company/company.py:449 #: erpnext/setup/doctype/customer_group/customer_group.json #: erpnext/setup/doctype/email_digest/email_digest.json #: erpnext/setup/doctype/incoterm/incoterm.json @@ -2166,7 +2170,7 @@ msgstr "" #. Label of the accounts_receivable_payable_tuning_section (Section Break) #. field in DocType 'Accounts Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json -msgid "Accounts Receivable / Payable Tuning" +msgid "Accounts Receivable / Payable Report" msgstr "" #. Label of the receivable_payable_remarks_length (Int) field in DocType @@ -2218,6 +2222,10 @@ msgstr "" msgid "Accounts Setup" msgstr "" +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:495 +msgid "Accounts cannot be removed, as user doesn't have access to all the accounts of {0}" +msgstr "" + #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1348 msgid "Accounts table cannot be blank." msgstr "" @@ -2406,7 +2414,7 @@ msgstr "" #. Label of the enable_serial_and_batch_no_for_item (Check) field in DocType #. 'Stock Settings' -#: erpnext/stock/doctype/item/item.js:408 +#: erpnext/stock/doctype/item/item.js:417 #: erpnext/stock/doctype/stock_settings/stock_settings.json msgid "Activate Serial / Batch No for Item" msgstr "" @@ -2530,7 +2538,7 @@ msgstr "" msgid "Actual End Date (via Timesheet)" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:304 +#: erpnext/manufacturing/doctype/work_order/work_order.py:311 msgid "Actual End Date cannot be before Actual Start Date" msgstr "" @@ -2649,6 +2657,10 @@ msgstr "" msgid "Actual Time in Hours (via Timesheet)" msgstr "" +#: erpnext/manufacturing/doctype/work_order/work_order.js:1129 +msgid "Actual quantity of the finished good that will be manufactured." +msgstr "" + #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1538 #: erpnext/public/js/controllers/accounts.js:194 msgid "Actual type tax cannot be included in Item rate in row {0}" @@ -2748,7 +2760,7 @@ msgid "Add Quote" msgstr "" #. Label of the add_raw_materials (Button) field in DocType 'BOM Operation' -#: erpnext/manufacturing/doctype/bom/bom.js:1054 +#: erpnext/manufacturing/doctype/bom/bom.js:1056 #: erpnext/manufacturing/doctype/bom_operation/bom_operation.json msgid "Add Raw Materials" msgstr "" @@ -3060,7 +3072,7 @@ msgstr "" msgid "Additional Discount Amount (Company Currency)" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:854 +#: erpnext/controllers/taxes_and_totals.py:893 msgid "Additional Discount Amount ({discount_amount}) cannot exceed the total before such discount ({total_before_discount})" msgstr "" @@ -3178,7 +3190,7 @@ msgstr "" msgid "Additional Transferred Qty" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:841 +#: erpnext/manufacturing/doctype/work_order/work_order.py:831 msgid "" "Additional Transferred Qty {0}\n" "\t\t\t\t\tcannot be greater than {1}.\n" @@ -3336,7 +3348,7 @@ msgstr "" msgid "Adjustment Against" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:653 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:654 msgid "Adjustment based on Purchase Invoice rate" msgstr "" @@ -3417,7 +3429,7 @@ msgstr "" #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/controllers/accounts_controller.py:311 +#: erpnext/controllers/accounts_controller.py:330 #: erpnext/setup/doctype/company/company.json msgid "Advance Payments" msgstr "" @@ -3453,7 +3465,7 @@ msgstr "" msgid "Advance amount" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:991 +#: erpnext/controllers/taxes_and_totals.py:1031 msgid "Advance amount cannot be greater than {0} {1}" msgstr "" @@ -3636,7 +3648,7 @@ msgstr "" msgid "Against Stock Entry" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:349 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:389 msgid "Against Supplier Invoice {0}" msgstr "" @@ -3681,7 +3693,7 @@ msgstr "" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:154 #: erpnext/accounts/report/accounts_payable/accounts_payable.html:138 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.html:139 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1229 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1261 msgid "Age (Days)" msgstr "" @@ -3788,9 +3800,9 @@ msgstr "" msgid "Alias" msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:165 -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:185 -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:169 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:153 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:173 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:181 #: erpnext/accounts/utils.py:1626 erpnext/public/js/setup_wizard.js:279 msgid "All Accounts" msgstr "" @@ -3815,7 +3827,7 @@ msgstr "" msgid "All Activities HTML" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:391 +#: erpnext/manufacturing/doctype/bom/bom.py:419 msgid "All BOMs" msgstr "" @@ -3843,21 +3855,21 @@ msgstr "" #: erpnext/patches/v11_0/update_department_lft_rgt.py:9 #: erpnext/patches/v11_0/update_department_lft_rgt.py:11 #: erpnext/patches/v11_0/update_department_lft_rgt.py:16 -#: erpnext/setup/doctype/company/company.py:441 -#: erpnext/setup/doctype/company/company.py:444 -#: erpnext/setup/doctype/company/company.py:449 -#: erpnext/setup/doctype/company/company.py:455 -#: erpnext/setup/doctype/company/company.py:461 -#: erpnext/setup/doctype/company/company.py:467 -#: erpnext/setup/doctype/company/company.py:473 -#: erpnext/setup/doctype/company/company.py:479 -#: erpnext/setup/doctype/company/company.py:485 -#: erpnext/setup/doctype/company/company.py:491 -#: erpnext/setup/doctype/company/company.py:497 -#: erpnext/setup/doctype/company/company.py:503 -#: erpnext/setup/doctype/company/company.py:509 -#: erpnext/setup/doctype/company/company.py:515 -#: erpnext/setup/doctype/company/company.py:521 +#: erpnext/setup/doctype/company/company.py:442 +#: erpnext/setup/doctype/company/company.py:445 +#: erpnext/setup/doctype/company/company.py:450 +#: erpnext/setup/doctype/company/company.py:456 +#: erpnext/setup/doctype/company/company.py:462 +#: erpnext/setup/doctype/company/company.py:468 +#: erpnext/setup/doctype/company/company.py:474 +#: erpnext/setup/doctype/company/company.py:480 +#: erpnext/setup/doctype/company/company.py:486 +#: erpnext/setup/doctype/company/company.py:492 +#: erpnext/setup/doctype/company/company.py:498 +#: erpnext/setup/doctype/company/company.py:504 +#: erpnext/setup/doctype/company/company.py:510 +#: erpnext/setup/doctype/company/company.py:516 +#: erpnext/setup/doctype/company/company.py:522 msgid "All Departments" msgstr "" @@ -3959,7 +3971,7 @@ msgstr "" msgid "All items are already requested" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1510 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1523 msgid "All items have already been Invoiced/Returned" msgstr "" @@ -3967,11 +3979,11 @@ msgstr "" msgid "All items have already been received" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3728 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3853 msgid "All items have already been transferred for this Work Order." msgstr "" -#: erpnext/public/js/controllers/transaction.js:2998 +#: erpnext/public/js/controllers/transaction.js:3002 msgid "All items in this document already have a linked Quality Inspection." msgstr "" @@ -3997,7 +4009,7 @@ msgstr "" msgid "All the items have been already returned." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1286 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1313 msgid "All the required items (raw materials) will be fetched from BOM and populated in this table. Here you can also change the Source Warehouse for any item. And during the production, you can track transferred raw materials from this table." msgstr "" @@ -4602,7 +4614,7 @@ msgstr "" msgid "Already set default in pos profile {0} for user {1}, kindly disabled default" msgstr "" -#: erpnext/stock/doctype/item/item.js:20 +#: erpnext/stock/doctype/item/item.js:26 msgid "Also you can't switch back to FIFO after setting the valuation method to Moving Average for this item." msgstr "" @@ -4642,7 +4654,7 @@ msgstr "" msgid "Alternative item must not be same as item code" msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:382 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:394 msgid "Alternatively, you can download the template and fill your data in." msgstr "" @@ -4826,7 +4838,7 @@ msgstr "" #: erpnext/manufacturing/doctype/bom_item/bom_item.json #: erpnext/manufacturing/doctype/work_order_additional_item/work_order_additional_item.json #: erpnext/manufacturing/doctype/work_order_item/work_order_item.json -#: erpnext/public/js/controllers/transaction.js:571 +#: erpnext/public/js/controllers/transaction.js:574 #: erpnext/selling/doctype/quotation/quotation.js:315 #: erpnext/selling/doctype/quotation_item/quotation_item.json #: erpnext/selling/doctype/sales_order_item/sales_order_item.json @@ -5046,7 +5058,7 @@ msgstr "" msgid "An Item Group is a way to classify items based on types." msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:74 +#: erpnext/crm/doctype/appointment/appointment.py:75 msgid "An appointment booked through the portal can only be opened via email verification." msgstr "" @@ -5217,15 +5229,15 @@ msgstr "" msgid "Applicable for external driver" msgstr "" -#: erpnext/regional/italy/setup.py:162 +#: erpnext/regional/italy/setup.py:166 msgid "Applicable if the company is SpA, SApA or SRL" msgstr "" -#: erpnext/regional/italy/setup.py:171 +#: erpnext/regional/italy/setup.py:175 msgid "Applicable if the company is a limited liability company" msgstr "" -#: erpnext/regional/italy/setup.py:122 +#: erpnext/regional/italy/setup.py:126 msgid "Applicable if the company is an Individual or a Proprietorship" msgstr "" @@ -5460,11 +5472,11 @@ msgstr "" msgid "Appointment Booking Slots" msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:181 +#: erpnext/crm/doctype/appointment/appointment.py:182 msgid "Appointment Confirmation" msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:189 +#: erpnext/crm/doctype/appointment/appointment.py:190 msgid "Appointment Confirmed" msgstr "" @@ -5507,15 +5519,15 @@ msgstr "" msgid "Appointment With" msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:86 +#: erpnext/crm/doctype/appointment/appointment.py:87 msgid "Appointment can only be scheduled up to {0} day(s) in advance." msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:79 +#: erpnext/crm/doctype/appointment/appointment.py:80 msgid "Appointment cannot be scheduled for a past time." msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:98 +#: erpnext/crm/doctype/appointment/appointment.py:99 msgid "Appointment cannot be scheduled on a holiday." msgstr "" @@ -5527,11 +5539,11 @@ msgstr "" msgid "Appointment is already verified." msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:116 +#: erpnext/crm/doctype/appointment/appointment.py:117 msgid "Appointment must be scheduled within the available slot timings." msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:66 +#: erpnext/crm/doctype/appointment/appointment.py:67 msgid "Appointments created manually cannot have 'Unverified' status." msgstr "" @@ -5650,7 +5662,7 @@ msgstr "" msgid "As the field {0} is enabled, the value of the field {1} should be more than 1." msgstr "" -#: erpnext/stock/doctype/item/item.py:1104 +#: erpnext/stock/doctype/item/item.py:1107 msgid "As there are existing submitted transactions against item {0}, you can not change the value of {1}." msgstr "" @@ -6085,7 +6097,7 @@ msgstr "" msgid "Asset cannot be scrapped before the last depreciation entry." msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:601 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:629 msgid "Asset capitalized after Asset Capitalization {0} was submitted" msgstr "" @@ -6105,7 +6117,7 @@ msgstr "" msgid "Asset issued to Employee {0}" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:182 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:183 msgid "Asset out of order due to Asset Repair {0}" msgstr "" @@ -6117,7 +6129,7 @@ msgstr "" msgid "Asset restored" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:609 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:637 msgid "Asset restored after Asset Capitalization {0} was cancelled" msgstr "" @@ -6150,7 +6162,7 @@ msgstr "" msgid "Asset updated after being split into Asset {0}" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:445 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:453 msgid "Asset updated due to Asset Repair {0} {1}." msgstr "" @@ -6158,7 +6170,7 @@ msgstr "" msgid "Asset {0} cannot be scrapped, as it is already {1}" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:199 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:225 msgid "Asset {0} does not belong to Item {1}" msgstr "" @@ -6174,16 +6186,16 @@ msgstr "" msgid "Asset {0} does not belong to the location {1}" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:650 -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:750 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:678 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:778 msgid "Asset {0} does not exist" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:576 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:604 msgid "Asset {0} has been updated. Please set the depreciation details if any and submit it." msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:75 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:76 msgid "Asset {0} is in {1} status and cannot be repaired." msgstr "" @@ -6199,7 +6211,7 @@ msgstr "" msgid "Asset {0} must be submitted" msgstr "" -#: erpnext/controllers/buying_controller.py:1112 +#: erpnext/controllers/buying_controller.py:1120 msgid "Asset {assets_link} created for {item_code}" msgstr "" @@ -6237,15 +6249,15 @@ msgstr "" msgid "Assets Setup" msgstr "" -#: erpnext/controllers/buying_controller.py:1130 +#: erpnext/controllers/buying_controller.py:1138 msgid "Assets not created for {item_code}. You will have to create asset manually." msgstr "" -#: erpnext/controllers/buying_controller.py:1117 +#: erpnext/controllers/buying_controller.py:1125 msgid "Assets {assets_link} created for {item_code}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:712 +#: erpnext/manufacturing/doctype/job_card/job_card.js:722 msgid "Assign Job to Employee" msgstr "" @@ -6310,7 +6322,7 @@ msgstr "" msgid "At least one of the Selling or Buying must be selected" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:437 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:442 msgid "At least one raw material item must be present in the stock entry for the type {0}" msgstr "" @@ -6318,11 +6330,11 @@ msgstr "" msgid "At least one row is required for a financial report template" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1002 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1007 msgid "At least one warehouse is mandatory" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:905 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:910 msgid "At row #{0}: the Difference Account must not be a Stock type account, please change the Account Type for the account {1} or select a different account" msgstr "" @@ -6330,7 +6342,7 @@ msgstr "" msgid "At row #{0}: the sequence id {1} cannot be less than previous row sequence id {2}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:916 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:921 msgid "At row #{0}: you have selected the Difference Account {1}, which is a Cost of Goods Sold type account. Please select a different account" msgstr "" @@ -6350,7 +6362,7 @@ msgstr "" msgid "At row {0}: Serial No is mandatory for Item {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:735 +#: erpnext/controllers/stock_controller.py:746 msgid "At row {0}: Serial and Batch Bundle {1} has already created. Please remove the values from the serial no or batch no fields." msgstr "" @@ -6367,7 +6379,7 @@ msgstr "" msgid "Atmosphere" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:255 +#: erpnext/public/js/utils/serial_no_batch_selector.js:265 #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js:73 msgid "Attach CSV File" msgstr "" @@ -6418,7 +6430,7 @@ msgstr "" msgid "Attribute Value {0} is not valid for the selected attribute {1}." msgstr "" -#: erpnext/stock/doctype/item/item.py:1040 +#: erpnext/stock/doctype/item/item.py:1043 msgid "Attribute table is mandatory" msgstr "" @@ -6434,7 +6446,7 @@ msgstr "" msgid "Attribute {0} is not valid for the selected template." msgstr "" -#: erpnext/stock/doctype/item/item.py:1044 +#: erpnext/stock/doctype/item/item.py:1047 msgid "Attribute {0} selected multiple times in Attributes Table" msgstr "" @@ -6521,11 +6533,11 @@ msgstr "" msgid "Auto Creation of Contact" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:379 +#: erpnext/public/js/utils/serial_no_batch_selector.js:389 msgid "Auto Fetch" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_item_details.js:227 +#: erpnext/selling/page/point_of_sale/pos_item_details.js:238 msgid "Auto Fetch Serial Numbers" msgstr "" @@ -6585,7 +6597,7 @@ msgstr "" msgid "Auto Reposting of Incorrect Valuation" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:208 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:209 msgid "Auto Tax Settings Error" msgstr "" @@ -6863,7 +6875,7 @@ msgstr "" msgid "Available for use date is required" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1252 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1257 msgid "Available quantity is {0}, you need {1}" msgstr "" @@ -6990,7 +7002,7 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.js:209 #: erpnext/manufacturing/doctype/work_order_operation/work_order_operation.json #: erpnext/manufacturing/report/bom_explorer/bom_explorer.js:8 -#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:67 +#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:73 #: erpnext/manufacturing/report/bom_stock_analysis/bom_stock_analysis.js:8 #: erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.py:109 #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json @@ -7011,7 +7023,7 @@ msgstr "" msgid "BOM 1" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1823 +#: erpnext/manufacturing/doctype/bom/bom.py:1846 msgid "BOM 1 {0} and BOM 2 {1} should not be same" msgstr "" @@ -7105,7 +7117,7 @@ msgstr "" msgid "BOM Item" msgstr "" -#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:71 +#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:77 #: erpnext/manufacturing/report/production_plan_summary/production_plan_summary.py:174 msgid "BOM Level" msgstr "" @@ -7258,7 +7270,7 @@ msgstr "" msgid "BOM Website Operation" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2834 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2908 msgid "BOM and Finished Good Quantity is mandatory for Disassembly" msgstr "" @@ -7277,23 +7289,23 @@ msgstr "" msgid "BOM recursion: {0} cannot be child of {1}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:790 +#: erpnext/manufacturing/doctype/bom/bom.py:818 msgid "BOM recursion: {1} cannot be parent or child of {0}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1541 +#: erpnext/manufacturing/doctype/bom/bom.py:1564 msgid "BOM {0} does not belong to Item {1}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1523 +#: erpnext/manufacturing/doctype/bom/bom.py:1546 msgid "BOM {0} must be active" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1526 +#: erpnext/manufacturing/doctype/bom/bom.py:1549 msgid "BOM {0} must be submitted" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:878 +#: erpnext/manufacturing/doctype/bom/bom.py:899 msgid "BOM {0} not found for the item {1}" msgstr "" @@ -7361,7 +7373,7 @@ msgstr "" #: erpnext/accounts/report/account_balance/account_balance.py:36 #: erpnext/accounts/report/general_ledger/general_ledger.html:168 #: erpnext/accounts/report/purchase_register/purchase_register.py:258 -#: erpnext/accounts/report/sales_register/sales_register.py:292 +#: erpnext/accounts/report/sales_register/sales_register.py:301 #: erpnext/stock/report/incorrect_serial_no_valuation/incorrect_serial_no_valuation.py:71 msgid "Balance" msgstr "" @@ -8150,9 +8162,9 @@ msgstr "" #: erpnext/manufacturing/doctype/job_card/job_card.json #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.js:89 #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.py:115 -#: erpnext/public/js/controllers/transaction.js:2901 +#: erpnext/public/js/controllers/transaction.js:2905 #: erpnext/public/js/utils/barcode_scanner.js:286 -#: erpnext/public/js/utils/serial_no_batch_selector.js:449 +#: erpnext/public/js/utils/serial_no_batch_selector.js:459 #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json #: erpnext/stock/doctype/item_price/item_price.json #: erpnext/stock/doctype/packed_item/packed_item.json @@ -8185,7 +8197,7 @@ msgstr "" msgid "Batch No is mandatory" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:3597 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:3600 msgid "Batch No {0} does not exists" msgstr "" @@ -8202,13 +8214,13 @@ msgstr "" msgid "Batch No." msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:16 -#: erpnext/public/js/utils/serial_no_batch_selector.js:201 +#: erpnext/public/js/utils/serial_no_batch_selector.js:26 +#: erpnext/public/js/utils/serial_no_batch_selector.js:211 #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js:50 msgid "Batch Nos" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2125 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2128 msgid "Batch Nos are created successfully" msgstr "" @@ -8262,7 +8274,7 @@ msgstr "" msgid "Batch and Serial No" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1068 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1061 msgid "Batch not created for item {} since it does not have a batch series." msgstr "" @@ -8285,12 +8297,12 @@ msgstr "" msgid "Batch {0} is not available in warehouse {1}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3912 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4037 #: erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py:290 msgid "Batch {0} of Item {1} has expired." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3918 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4043 msgid "Batch {0} of Item {1} is disabled." msgstr "" @@ -8345,7 +8357,7 @@ msgstr "" #. Label of the bill_date (Date) field in DocType 'Journal Entry' #. Label of the bill_date (Date) field in DocType 'Subcontracting Receipt' #: erpnext/accounts/doctype/journal_entry/journal_entry.json -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1214 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1246 #: erpnext/accounts/report/purchase_register/purchase_register.py:230 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json msgid "Bill Date" @@ -8354,7 +8366,7 @@ msgstr "" #. Label of the bill_no (Data) field in DocType 'Journal Entry' #. Label of the bill_no (Data) field in DocType 'Subcontracting Receipt' #: erpnext/accounts/doctype/journal_entry/journal_entry.json -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1213 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1245 #: erpnext/accounts/report/purchase_register/purchase_register.py:229 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json msgid "Bill No" @@ -8369,7 +8381,7 @@ msgstr "" #. Label of a Card Break in the Manufacturing Workspace #. Label of a Link in the Manufacturing Workspace #. Label of a Workspace Sidebar Item -#: erpnext/manufacturing/doctype/bom/bom.py:1373 +#: erpnext/manufacturing/doctype/bom/bom.py:1396 #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json #: erpnext/stock/doctype/material_request/material_request.js:142 #: erpnext/stock/doctype/stock_entry/stock_entry.js:772 @@ -8473,7 +8485,7 @@ msgstr "" msgid "Billing Address Name" msgstr "" -#: erpnext/controllers/accounts_controller.py:598 +#: erpnext/controllers/accounts_controller.py:617 msgid "Billing Address does not belong to the {0}" msgstr "" @@ -8484,7 +8496,7 @@ msgstr "" #. Detail' #: erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json #: erpnext/projects/doctype/timesheet_detail/timesheet_detail.json -#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:73 +#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:82 #: erpnext/selling/report/territory_wise_sales/territory_wise_sales.py:50 msgid "Billing Amount" msgstr "" @@ -8531,7 +8543,7 @@ msgstr "" #. Label of the billing_hours (Float) field in DocType 'Timesheet Detail' #: erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json #: erpnext/projects/doctype/timesheet_detail/timesheet_detail.json -#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:67 +#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:76 msgid "Billing Hours" msgstr "" @@ -8721,12 +8733,6 @@ msgstr "" msgid "Block Supplier" msgstr "" -#. Description of the 'Restrict Customer Over Billing' (Check) field in DocType -#. 'Accounts Settings' -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json -msgid "Block a new Sales Invoice when the customer's overdue amount exceeds the Overdue Limit set on the customer." -msgstr "" - #. Description of the 'Is Frozen' (Check) field in DocType 'Customer' #: erpnext/selling/doctype/customer/customer.json msgid "Blocks all further accounting entries on this customer's account. Only users with the frozen-entries role can override.\n" @@ -8747,6 +8753,12 @@ msgstr "" msgid "Blood Group" msgstr "" +#. Label of the body (Text Editor) field in DocType 'Process Statement Of +#. Accounts' +#: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json +msgid "Body" +msgstr "" + #. Label of the body_text (Text Editor) field in DocType 'Dunning' #. Label of the body_text (Text Editor) field in DocType 'Dunning Letter Text' #: erpnext/accounts/doctype/dunning/dunning.json @@ -9225,6 +9237,7 @@ msgstr "" #. Label of a Link in the Buying Workspace #. Label of a shortcut in the ERPNext Settings Workspace #. Label of a Workspace Sidebar Item +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:362 #: erpnext/buying/doctype/buying_settings/buying_settings.json #: erpnext/buying/workspace/buying/buying.json #: erpnext/setup/workspace/erpnext_settings/erpnext_settings.json @@ -9571,7 +9584,7 @@ msgstr "" msgid "Can be approved by {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2852 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2845 msgid "Can not close Work Order. Since {0} Job Cards are in Work In Progress state." msgstr "" @@ -9605,7 +9618,7 @@ msgid "Can only make payment against unbilled {0}" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1510 -#: erpnext/controllers/accounts_controller.py:3221 +#: erpnext/controllers/accounts_controller.py:3257 #: erpnext/public/js/controllers/accounts.js:100 msgid "Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total'" msgstr "" @@ -9643,7 +9656,7 @@ msgstr "" msgid "Cancelation Date" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1521 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1650 msgid "Cancelled Job Card cannot be processed." msgstr "" @@ -9714,11 +9727,11 @@ msgstr "" msgid "Cannot cancel as processing of cancelled documents is pending." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1246 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1239 msgid "Cannot cancel because submitted Stock Entry {0} exists" msgstr "" -#: erpnext/stock/stock_ledger.py:206 +#: erpnext/stock/stock_ledger.py:208 msgid "Cannot cancel the transaction. Reposting of item valuation on submission is not completed yet." msgstr "" @@ -9730,11 +9743,11 @@ msgstr "" msgid "Cannot cancel this document as it is linked with the submitted Asset Value Adjustment {0}. Please cancel the Asset Value Adjustment to continue." msgstr "" -#: erpnext/controllers/buying_controller.py:1219 +#: erpnext/controllers/buying_controller.py:1227 msgid "Cannot cancel this document as it is linked with the submitted asset {asset_link}. Please cancel the asset to continue." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:680 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:685 msgid "Cannot cancel transaction for Completed Work Order." msgstr "" @@ -9742,7 +9755,7 @@ msgstr "" msgid "Cannot change Attributes after stock transaction. Make a new Item and transfer stock to the new Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:1129 +#: erpnext/stock/doctype/item/item.py:1132 msgid "Cannot change Item {0} from serialized to non-serialized because a Serial and Batch Bundle exists for it. Please delete or cancel the Serial and Batch Bundle first." msgstr "" @@ -9762,7 +9775,7 @@ msgstr "" msgid "Cannot change company's default currency, because there are existing transactions. Transactions must be cancelled to change the default currency." msgstr "" -#: erpnext/projects/doctype/task/task.py:148 +#: erpnext/projects/doctype/task/task.py:164 msgid "Cannot complete task {0} as its dependant task {1} are not completed / cancelled." msgstr "" @@ -9786,11 +9799,11 @@ msgstr "" msgid "Cannot create Intercompany {0}. All items in the source {1} have already been fully invoiced. Please check the existing linked {2}s." msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1011 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1015 msgid "Cannot create Stock Reservation Entries for future dated Purchase Receipts." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1905 +#: erpnext/selling/doctype/sales_order/sales_order.py:1937 #: erpnext/stock/doctype/pick_list/pick_list.py:260 msgid "Cannot create a pick list for Sales Order {0} because it has reserved stock. Please unreserve the stock in order to create a pick list." msgstr "" @@ -9803,11 +9816,11 @@ msgstr "" msgid "Cannot create return for consolidated invoice {0}." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1211 +#: erpnext/manufacturing/doctype/bom/bom.py:1232 msgid "Cannot deactivate or cancel BOM as it is linked with other BOMs" msgstr "" -#: erpnext/crm/doctype/opportunity/opportunity.py:292 +#: erpnext/crm/doctype/opportunity/opportunity.py:294 msgid "Cannot declare as Lost because an active Quotation exists." msgstr "" @@ -9824,7 +9837,7 @@ msgstr "" msgid "Cannot delete Serial No {0}, as it is used in stock transactions" msgstr "" -#: erpnext/controllers/accounts_controller.py:3871 +#: erpnext/controllers/accounts_controller.py:3907 msgid "Cannot delete an item which has been ordered" msgstr "" @@ -9841,7 +9854,7 @@ msgstr "" msgid "Cannot disable Serial and Batch No for Item, as there are existing records for serial / batch." msgstr "" -#: erpnext/setup/doctype/company/company.py:564 +#: erpnext/setup/doctype/company/company.py:565 msgid "Cannot disable perpetual inventory, as there are existing Stock Ledger Entries for the company {0}. Please cancel the stock transactions first and try again." msgstr "" @@ -9849,11 +9862,11 @@ msgstr "" msgid "Cannot disable {0} as it may lead to incorrect stock valuation." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:858 +#: erpnext/manufacturing/doctype/work_order/work_order.py:848 msgid "Cannot disassemble more than produced quantity." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1045 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1050 msgid "Cannot disassemble {0} qty against Stock Entry {1}. Only {2} qty available to disassemble." msgstr "" @@ -9865,8 +9878,8 @@ msgstr "" msgid "Cannot enable Opportunity creation from Contact Us because the Contact Us form is disabled." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:781 -#: erpnext/selling/doctype/sales_order/sales_order.py:804 +#: erpnext/selling/doctype/sales_order/sales_order.py:782 +#: erpnext/selling/doctype/sales_order/sales_order.py:805 msgid "Cannot ensure delivery by Serial No as Item {0} is added with and without Ensure Delivery by Serial No." msgstr "" @@ -9882,7 +9895,7 @@ msgstr "" msgid "Cannot find Item with this Barcode" msgstr "" -#: erpnext/controllers/accounts_controller.py:3810 +#: erpnext/controllers/accounts_controller.py:3846 msgid "Cannot find a default warehouse for item {0}. Please select one in the Update Items dialog, or set a default in the Item Master or in Stock Settings." msgstr "" @@ -9890,15 +9903,15 @@ msgstr "" msgid "Cannot merge {0} '{1}' into '{2}' as both have existing accounting entries in different currencies for company '{3}'." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:647 +#: erpnext/manufacturing/doctype/work_order/work_order.py:665 msgid "Cannot produce more Item {0} than Sales Order quantity {1} {2}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1620 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1613 msgid "Cannot produce more item for {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1624 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1617 msgid "Cannot produce more than {0} items for {1}" msgstr "" @@ -9906,12 +9919,12 @@ msgstr "" msgid "Cannot receive from customer against negative outstanding" msgstr "" -#: erpnext/controllers/accounts_controller.py:4020 +#: erpnext/controllers/accounts_controller.py:4056 msgid "Cannot reduce quantity than ordered or purchased quantity" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1523 -#: erpnext/controllers/accounts_controller.py:3236 +#: erpnext/controllers/accounts_controller.py:3272 #: erpnext/public/js/controllers/accounts.js:117 msgid "Cannot refer row number greater than or equal to current row number for this Charge type" msgstr "" @@ -9935,9 +9948,9 @@ msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1516 #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1694 #: erpnext/accounts/doctype/payment_entry/payment_entry.py:1848 -#: erpnext/controllers/accounts_controller.py:3226 +#: erpnext/controllers/accounts_controller.py:3262 #: erpnext/public/js/controllers/accounts.js:109 -#: erpnext/public/js/controllers/taxes_and_totals.js:570 +#: erpnext/public/js/controllers/taxes_and_totals.js:589 msgid "Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row" msgstr "" @@ -9953,11 +9966,11 @@ msgstr "" msgid "Cannot set multiple Item Defaults for a company." msgstr "" -#: erpnext/controllers/accounts_controller.py:3986 +#: erpnext/controllers/accounts_controller.py:4022 msgid "Cannot set quantity less than delivered quantity." msgstr "" -#: erpnext/controllers/accounts_controller.py:3987 +#: erpnext/controllers/accounts_controller.py:4023 msgid "Cannot set quantity less than received quantity." msgstr "" @@ -9969,11 +9982,11 @@ msgstr "" msgid "Cannot start deletion. Another deletion {0} is already queued/running. Please wait for it to complete." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:874 +#: erpnext/manufacturing/doctype/job_card/job_card.py:881 msgid "Cannot submit Job Card {0} while it is On Hold. Please resume and complete the job before submission." msgstr "" -#: erpnext/controllers/accounts_controller.py:4014 +#: erpnext/controllers/accounts_controller.py:4050 msgid "Cannot update rate as item {0} is already ordered or purchased against this quotation" msgstr "" @@ -10006,7 +10019,7 @@ msgstr "" msgid "Capacity Planning" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1232 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1225 msgid "Capacity Planning Error, planned start time can not be same as end time" msgstr "" @@ -10154,7 +10167,7 @@ msgstr "" msgid "Cash In Hand" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:339 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:379 msgid "Cash or Bank Account is mandatory for making payment entry" msgstr "" @@ -10245,7 +10258,7 @@ msgid "Category Details" msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order.py:301 -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:144 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:150 msgid "Caution" msgstr "" @@ -10367,7 +10380,7 @@ msgstr "" msgid "Changes in {0}" msgstr "" -#: erpnext/stock/doctype/item/item.js:374 +#: erpnext/stock/doctype/item/item.js:383 msgid "Changing Customer Group for the selected Customer is not allowed." msgstr "" @@ -10377,7 +10390,7 @@ msgstr "" msgid "Changing the account in any transaction of the DocTypes listed below will trigger a repost. To prevent reposting, remove the relevant DocType from the list." msgstr "" -#: erpnext/stock/doctype/item/item.js:16 +#: erpnext/stock/doctype/item/item.js:22 msgid "Changing the valuation method to Moving Average will affect new transactions. If backdated entries are added, earlier FIFO-based entries will be reposted, which may change closing balances." msgstr "" @@ -10388,7 +10401,7 @@ msgid "Channel Partner" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:2277 -#: erpnext/controllers/accounts_controller.py:3289 +#: erpnext/controllers/accounts_controller.py:3325 msgid "Charge of type 'Actual' in row {0} cannot be included in Item Rate or Paid Amount" msgstr "" @@ -10582,7 +10595,7 @@ msgstr "" #. Label of the reference_date (Date) field in DocType 'Payment Entry' #: erpnext/accounts/doctype/payment_entry/payment_entry.json -#: erpnext/public/js/controllers/transaction.js:2812 +#: erpnext/public/js/controllers/transaction.js:2816 msgid "Cheque/Reference Date" msgstr "" @@ -10640,7 +10653,7 @@ msgstr "" #. Label of the child_row_reference (Data) field in DocType 'Quality #. Inspection' -#: erpnext/public/js/controllers/transaction.js:2907 +#: erpnext/public/js/controllers/transaction.js:2911 #: erpnext/stock/doctype/quality_inspection/quality_inspection.json msgid "Child Row Reference" msgstr "" @@ -10649,7 +10662,7 @@ msgstr "" msgid "Child Table Not Allowed" msgstr "" -#: erpnext/projects/doctype/task/task.py:332 +#: erpnext/projects/doctype/task/task.py:348 msgid "Child Task exists for this Task. You can not delete this Task." msgstr "" @@ -10663,11 +10676,11 @@ msgstr "" msgid "Child tables that will also be deleted" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:103 +#: erpnext/stock/doctype/warehouse/warehouse.py:123 msgid "Child warehouse exists for this warehouse. You can not delete this warehouse." msgstr "" -#: erpnext/projects/doctype/task/task.py:263 +#: erpnext/projects/doctype/task/task.py:279 msgid "Circular Reference Error" msgstr "" @@ -10847,11 +10860,11 @@ msgstr "" msgid "Closed Period" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2775 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2767 msgid "Closed Work Order can not be stopped or Re-opened" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:540 +#: erpnext/selling/doctype/sales_order/sales_order.py:541 msgid "Closed order cannot be cancelled. Unclose to cancel." msgstr "" @@ -11686,11 +11699,11 @@ msgstr "" msgid "Company Address Name" msgstr "" -#: erpnext/controllers/accounts_controller.py:4450 +#: erpnext/controllers/accounts_controller.py:4486 msgid "Company Address is missing. You don't have permission to create an Address. Please contact your System Manager." msgstr "" -#: erpnext/controllers/accounts_controller.py:4438 +#: erpnext/controllers/accounts_controller.py:4474 msgid "Company Address is missing. You don't have permission to update it. Please contact your System Manager." msgstr "" @@ -11910,7 +11923,8 @@ msgstr "" msgid "Competitors" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:663 +#: erpnext/manufacturing/doctype/job_card/job_card.js:412 +#: erpnext/manufacturing/doctype/job_card/job_card.js:673 #: erpnext/manufacturing/doctype/workstation/workstation.js:151 msgid "Complete Job" msgstr "" @@ -11933,7 +11947,7 @@ msgstr "" msgid "Completed On" msgstr "" -#: erpnext/projects/doctype/task/task.py:188 +#: erpnext/projects/doctype/task/task.py:204 msgid "Completed On cannot be greater than Today" msgstr "" @@ -11957,16 +11971,23 @@ msgstr "" msgid "Completed Qty" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1538 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1531 msgid "Completed Qty cannot be greater than 'Qty to Manufacture'" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:258 -#: erpnext/manufacturing/doctype/job_card/job_card.js:392 +#: erpnext/manufacturing/doctype/job_card/job_card.js:265 #: erpnext/manufacturing/doctype/workstation/workstation.js:296 msgid "Completed Quantity" msgstr "" +#: erpnext/manufacturing/doctype/job_card/job_card.py:1710 +msgid "Completed Quantity ({0}), Pending Quantity ({1}) and Process Loss Quantity ({2}) must add up to the Qty to Manufacture ({3})." +msgstr "" + +#: erpnext/manufacturing/doctype/job_card/job_card.js:282 +msgid "Completed Quantity cannot be greater than {0}" +msgstr "" + #: erpnext/projects/report/project_summary/project_summary.py:136 #: erpnext/public/js/templates/crm_activities.html:64 msgid "Completed Tasks" @@ -11982,6 +12003,10 @@ msgstr "" msgid "Completed Work Orders" msgstr "" +#: erpnext/manufacturing/doctype/job_card/job_card.js:255 +msgid "Completed, Pending and Process Loss quantities must add up to this." +msgstr "" + #: erpnext/projects/report/project_summary/project_summary.py:73 msgid "Completion" msgstr "" @@ -12000,7 +12025,7 @@ msgstr "" msgid "Completion Date" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:86 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:87 msgid "Completion Date can not be before Failure Date. Please adjust the dates accordingly." msgstr "" @@ -12154,10 +12179,6 @@ msgstr "" msgid "Consider Minimum Order Qty" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1094 -msgid "Consider Process Loss" -msgstr "" - #. Label of the skip_available_sub_assembly_item (Check) field in DocType #. 'Production Plan' #: erpnext/manufacturing/doctype/production_plan/production_plan.json @@ -12351,7 +12372,7 @@ msgstr "" msgid "Consumed Qty" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1944 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1936 msgid "Consumed Qty cannot be greater than Reserved Qty for item {0}" msgstr "" @@ -12370,7 +12391,7 @@ msgstr "" msgid "Consumed Stock Items" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:289 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:315 msgid "Consumed Stock Items, Consumed Asset Items or Consumed Service Items is mandatory for Capitalization" msgstr "" @@ -12380,7 +12401,7 @@ msgstr "" msgid "Consumed Stock Total Value" msgstr "" -#: erpnext/stock/doctype/stock_entry_type/stock_entry_type.py:136 +#: erpnext/stock/doctype/stock_entry_type/stock_entry_type.py:138 msgid "Consumed quantity of item {0} exceeds transferred quantity." msgstr "" @@ -12508,7 +12529,7 @@ msgstr "" msgid "Contact Person" msgstr "" -#: erpnext/controllers/accounts_controller.py:610 +#: erpnext/controllers/accounts_controller.py:629 msgid "Contact Person does not belong to the {0}" msgstr "" @@ -12706,19 +12727,19 @@ msgstr "" msgid "Conversion factor for default Unit of Measure must be 1 in row {0}" msgstr "" -#: erpnext/controllers/stock_controller.py:177 +#: erpnext/controllers/stock_controller.py:179 msgid "Conversion factor for item {0} has been reset to 1.0 as the uom {1} is same as stock uom {2}." msgstr "" -#: erpnext/controllers/accounts_controller.py:3004 +#: erpnext/controllers/accounts_controller.py:3040 msgid "Conversion rate cannot be 0" msgstr "" -#: erpnext/controllers/accounts_controller.py:3011 +#: erpnext/controllers/accounts_controller.py:3047 msgid "Conversion rate is 1.00, but document currency is different from company currency" msgstr "" -#: erpnext/controllers/accounts_controller.py:3007 +#: erpnext/controllers/accounts_controller.py:3043 msgid "Conversion rate must be 1.00 if document currency is same as company currency" msgstr "" @@ -12795,13 +12816,13 @@ msgstr "" msgid "Corrective Action" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:446 +#: erpnext/manufacturing/doctype/job_card/job_card.js:457 msgid "Corrective Job Card" msgstr "" #. Label of the corrective_operation_section (Tab Break) field in DocType 'Job #. Card' -#: erpnext/manufacturing/doctype/job_card/job_card.js:455 +#: erpnext/manufacturing/doctype/job_card/job_card.js:466 #: erpnext/manufacturing/doctype/job_card/job_card.json msgid "Corrective Operation" msgstr "" @@ -12968,7 +12989,7 @@ msgstr "" #: erpnext/accounts/report/accounts_payable/accounts_payable.js:28 #: erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js:47 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.js:30 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1199 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1231 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js:47 #: erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.js:42 #: erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.py:204 @@ -12981,7 +13002,7 @@ msgstr "" #: erpnext/accounts/report/purchase_register/purchase_register.js:46 #: erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py:29 #: erpnext/accounts/report/sales_register/sales_register.js:52 -#: erpnext/accounts/report/sales_register/sales_register.py:266 +#: erpnext/accounts/report/sales_register/sales_register.py:275 #: erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js:79 #: erpnext/accounts/report/trial_balance/trial_balance.js:49 #: erpnext/assets/doctype/asset/asset.json @@ -13072,8 +13093,8 @@ msgstr "" msgid "Cost Center is required" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1508 -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:898 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1548 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:902 msgid "Cost Center is required in row {0} in Taxes table for type {1}" msgstr "" @@ -13119,7 +13140,7 @@ msgstr "" msgid "Cost Per Unit" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:442 +#: erpnext/manufacturing/doctype/bom/bom.py:470 msgid "Cost allocation between finished goods and secondary items should equal 100%" msgstr "" @@ -13155,7 +13176,7 @@ msgstr "" msgid "Cost of Goods Sold" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:919 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:924 msgid "Cost of Goods Sold Account in Items Table" msgstr "" @@ -13543,7 +13564,7 @@ msgstr "" msgid "Create Payment Entry for Consolidated POS Invoices." msgstr "" -#: erpnext/public/js/controllers/transaction.js:579 +#: erpnext/public/js/controllers/transaction.js:582 msgid "Create Payment Request" msgstr "" @@ -13730,12 +13751,12 @@ msgstr "" msgid "Create Users" msgstr "" -#: erpnext/stock/doctype/item/item.js:1103 +#: erpnext/stock/doctype/item/item.js:1112 msgid "Create Variant" msgstr "" -#: erpnext/stock/doctype/item/item.js:915 -#: erpnext/stock/doctype/item/item.js:952 +#: erpnext/stock/doctype/item/item.js:924 +#: erpnext/stock/doctype/item/item.js:961 msgid "Create Variants" msgstr "" @@ -13770,12 +13791,12 @@ msgstr "" msgid "Create a new rule to automatically classify transactions." msgstr "" -#: erpnext/stock/doctype/item/item.js:935 -#: erpnext/stock/doctype/item/item.js:1096 +#: erpnext/stock/doctype/item/item.js:944 +#: erpnext/stock/doctype/item/item.js:1105 msgid "Create a variant with the template image." msgstr "" -#: erpnext/stock/stock_ledger.py:2095 +#: erpnext/stock/stock_ledger.py:2097 msgid "Create an incoming stock transaction for the Item." msgstr "" @@ -13835,7 +13856,7 @@ msgstr "" msgid "Creates an Item Price automatically when the item is saved" msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:140 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:128 msgid "Creating Accounts..." msgstr "" @@ -13953,7 +13974,7 @@ msgstr "" #: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:431 #: erpnext/accounts/report/general_ledger/general_ledger.html:167 #: erpnext/accounts/report/purchase_register/purchase_register.py:257 -#: erpnext/accounts/report/sales_register/sales_register.py:291 +#: erpnext/accounts/report/sales_register/sales_register.py:300 #: erpnext/accounts/report/trial_balance/trial_balance.py:530 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:212 #: erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.py:34 @@ -14083,7 +14104,7 @@ msgstr "" #: erpnext/accounts/doctype/journal_entry/journal_entry.json #: erpnext/accounts/doctype/journal_entry_template/journal_entry_template.json #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:176 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1223 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1255 #: erpnext/controllers/sales_and_purchase_return.py:473 #: erpnext/setup/setup_wizard/operations/install_fixtures.py:306 #: erpnext/stock/doctype/delivery_note/delivery_note.js:89 @@ -14117,9 +14138,9 @@ msgstr "" #. Label of the credit_to (Link) field in DocType 'Purchase Invoice' #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:393 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:401 -#: erpnext/controllers/accounts_controller.py:2408 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:433 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:441 +#: erpnext/controllers/accounts_controller.py:2444 msgid "Credit To" msgstr "" @@ -14197,7 +14218,7 @@ msgstr "" msgid "Criteria weights must add up to 100%" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:195 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:196 msgid "Cron Interval should be between 1 and 59 Min" msgstr "" @@ -14334,7 +14355,7 @@ msgstr "" msgid "Currency of the Closing Account must be {0}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:724 +#: erpnext/manufacturing/doctype/bom/bom.py:752 msgid "Currency of the price list {0} must be {1} or {2}" msgstr "" @@ -14620,7 +14641,7 @@ msgstr "" #: erpnext/accounts/report/pos_register/pos_register.py:120 #: erpnext/accounts/report/pos_register/pos_register.py:181 #: erpnext/accounts/report/sales_register/sales_register.js:21 -#: erpnext/accounts/report/sales_register/sales_register.py:201 +#: erpnext/accounts/report/sales_register/sales_register.py:210 #: erpnext/assets/doctype/asset/asset.json #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/supplier/supplier.js:225 @@ -14782,7 +14803,7 @@ msgstr "" #. Label of the customer_contact_display (Small Text) field in DocType #. 'Purchase Order' #. Label of the customer_contact (Small Text) field in DocType 'Delivery Stop' -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1193 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1225 #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/stock/doctype/delivery_stop/delivery_stop.json msgid "Customer Contact" @@ -14888,7 +14909,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/doctype/tax_rule/tax_rule.json #: erpnext/accounts/report/accounts_receivable/accounts_receivable.js:115 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1251 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1283 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js:96 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:185 #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js:56 @@ -14896,7 +14917,7 @@ msgstr "" #: erpnext/accounts/report/gross_profit/gross_profit.py:425 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:208 #: erpnext/accounts/report/sales_register/sales_register.js:27 -#: erpnext/accounts/report/sales_register/sales_register.py:216 +#: erpnext/accounts/report/sales_register/sales_register.py:225 #: erpnext/controllers/trends.py:448 #: erpnext/crm/doctype/opportunity/opportunity.json #: erpnext/crm/doctype/prospect/prospect.json @@ -14950,7 +14971,7 @@ msgstr "" msgid "Customer Items" msgstr "" -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1242 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1274 msgid "Customer LPO" msgstr "" @@ -15002,13 +15023,13 @@ msgstr "" #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json #: erpnext/accounts/doctype/process_statement_of_accounts_customer/process_statement_of_accounts_customer.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1182 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1214 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:156 #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js:92 #: erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py:35 #: erpnext/accounts/report/gross_profit/gross_profit.py:432 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:228 -#: erpnext/accounts/report/sales_register/sales_register.py:207 +#: erpnext/accounts/report/sales_register/sales_register.py:216 #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/controllers/trends.py:428 #: erpnext/crm/doctype/opportunity/opportunity.json @@ -15109,7 +15130,7 @@ msgstr "" msgid "Customer Provided Item Cost" msgstr "" -#: erpnext/setup/doctype/company/company.py:490 +#: erpnext/setup/doctype/company/company.py:491 msgid "Customer Service" msgstr "" @@ -15167,7 +15188,7 @@ msgid "Customer required for 'Customerwise Discount'" msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1196 -#: erpnext/selling/doctype/sales_order/sales_order.py:436 +#: erpnext/selling/doctype/sales_order/sales_order.py:437 #: erpnext/stock/doctype/delivery_note/delivery_note.py:407 msgid "Customer {0} does not belong to project {1}" msgstr "" @@ -15508,6 +15529,15 @@ msgstr "" msgid "Dealer" msgstr "" +#: erpnext/templates/emails/appointment_confirmed.html:1 +#: erpnext/templates/emails/confirm_appointment.html:1 +msgid "Dear" +msgstr "" + +#: erpnext/stock/reorder_item.py:378 +msgid "Dear System Manager," +msgstr "" + #. Option for the 'Balance must be' (Select) field in DocType 'Account' #. Label of the debit (Data) field in DocType 'Bank Transaction Rule Accounts' #. Label of the debit_in_account_currency (Currency) field in DocType 'Journal @@ -15530,7 +15560,7 @@ msgstr "" #: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:424 #: erpnext/accounts/report/general_ledger/general_ledger.html:166 #: erpnext/accounts/report/purchase_register/purchase_register.py:256 -#: erpnext/accounts/report/sales_register/sales_register.py:290 +#: erpnext/accounts/report/sales_register/sales_register.py:299 #: erpnext/accounts/report/trial_balance/trial_balance.py:523 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:205 #: erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.py:27 @@ -15593,7 +15623,7 @@ msgstr "" #: erpnext/accounts/doctype/journal_entry/journal_entry.json #: erpnext/accounts/doctype/journal_entry_template/journal_entry_template.json #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:178 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1226 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1258 #: erpnext/controllers/sales_and_purchase_return.py:477 #: erpnext/setup/setup_wizard/operations/install_fixtures.py:307 #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.js:45 @@ -15623,7 +15653,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1067 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1078 -#: erpnext/controllers/accounts_controller.py:2408 +#: erpnext/controllers/accounts_controller.py:2444 msgid "Debit To" msgstr "" @@ -15807,15 +15837,15 @@ msgstr "" msgid "Default BOM ({0}) must be active for this item or its template" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2536 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2528 msgid "Default BOM for {0} not found" msgstr "" -#: erpnext/controllers/accounts_controller.py:4058 +#: erpnext/controllers/accounts_controller.py:4094 msgid "Default BOM not found for FG Item {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2533 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2525 msgid "Default BOM not found for Item {0} and Project {1}" msgstr "" @@ -16147,11 +16177,11 @@ msgstr "" msgid "Default Unit of Measure" msgstr "" -#: erpnext/stock/doctype/item/item.py:1406 +#: erpnext/stock/doctype/item/item.py:1409 msgid "Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You need to either cancel the linked documents or create a new Item." msgstr "" -#: erpnext/stock/doctype/item/item.py:1389 +#: erpnext/stock/doctype/item/item.py:1392 msgid "Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM." msgstr "" @@ -16603,7 +16633,7 @@ msgstr "" #: erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js:22 #: erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py:21 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:291 -#: erpnext/accounts/report/sales_register/sales_register.py:259 +#: erpnext/accounts/report/sales_register/sales_register.py:268 #: erpnext/selling/doctype/sales_order/sales_order.js:1048 #: erpnext/selling/doctype/sales_order/sales_order_list.js:81 #: erpnext/selling/doctype/selling_settings/selling_settings.js:52 @@ -16663,7 +16693,7 @@ msgstr "" msgid "Delivery Note {0} is not submitted" msgstr "" -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1246 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1278 #: erpnext/stock/doctype/delivery_trip/delivery_trip.js:75 msgid "Delivery Notes" msgstr "" @@ -16753,7 +16783,7 @@ msgstr "" #. DocType 'Master Production Schedule' #: erpnext/manufacturing/doctype/master_production_schedule/master_production_schedule.json #: erpnext/manufacturing/report/exponential_smoothing_forecasting/exponential_smoothing_forecasting.py:233 -#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:313 +#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:309 #: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:378 msgid "Demand" msgstr "" @@ -16764,7 +16794,7 @@ msgstr "" msgid "Demand Qty" msgstr "" -#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:325 +#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:321 #: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:390 msgid "Demand vs Supply" msgstr "" @@ -16810,7 +16840,7 @@ msgstr "" msgid "Dependent Task" msgstr "" -#: erpnext/projects/doctype/task/task.py:181 +#: erpnext/projects/doctype/task/task.py:197 msgid "Dependent Task {0} is not a Template Task" msgstr "" @@ -17129,11 +17159,11 @@ msgstr "" msgid "Difference Account" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:908 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:913 msgid "Difference Account in Items Table" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:897 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:902 msgid "Difference Account must be a Asset/Liability type account (Temporary Opening), since this Stock Entry is an Opening Entry" msgstr "" @@ -17265,6 +17295,12 @@ msgstr "" msgid "Direct return is not allowed for Timesheet." msgstr "" +#. Label of the disable_include_dimensions (Check) field in DocType 'Accounts +#. Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Disable \"Consider Accounting Dimension\" Filter" +msgstr "" + #. Label of the disable_capacity_planning (Check) field in DocType #. 'Manufacturing Settings' #: erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.json @@ -17355,7 +17391,7 @@ msgstr "" msgid "Disabled items cannot be selected in any transaction." msgstr "" -#: erpnext/controllers/accounts_controller.py:936 +#: erpnext/controllers/accounts_controller.py:972 msgid "Disabled pricing rules since this {} is an internal transfer" msgstr "" @@ -17364,7 +17400,7 @@ msgstr "" msgid "Disabled suppliers are hidden from selection in new transactions but remain in historical records" msgstr "" -#: erpnext/controllers/accounts_controller.py:950 +#: erpnext/controllers/accounts_controller.py:986 msgid "Disabled tax included prices since this {} is an internal transfer" msgstr "" @@ -17380,7 +17416,7 @@ msgstr "" #. Option for the 'Purpose' (Select) field in DocType 'Stock Entry' #. Option for the 'Purpose' (Select) field in DocType 'Stock Entry Type' -#: erpnext/manufacturing/doctype/work_order/work_order.js:1072 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1081 #: erpnext/stock/doctype/stock_entry/stock_entry.js:392 #: erpnext/stock/doctype/stock_entry/stock_entry.js:435 #: erpnext/stock/doctype/stock_entry/stock_entry.json @@ -17392,7 +17428,7 @@ msgstr "" msgid "Disassemble Order" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2776 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2850 msgid "Disassemble Qty cannot be less than or equal to 0." msgstr "" @@ -17434,7 +17470,7 @@ msgstr "" msgid "Discount" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_item_details.js:177 +#: erpnext/selling/page/point_of_sale/pos_item_details.js:188 msgid "Discount (%)" msgstr "" @@ -17683,7 +17719,7 @@ msgstr "" msgid "Dislikes" msgstr "" -#: erpnext/setup/doctype/company/company.py:484 +#: erpnext/setup/doctype/company/company.py:485 msgid "Dispatch" msgstr "" @@ -17959,7 +17995,7 @@ msgstr "" msgid "Do you still want to enable negative inventory?" msgstr "" -#: erpnext/stock/doctype/item/item.js:24 +#: erpnext/stock/doctype/item/item.js:30 msgid "Do you want to change valuation method?" msgstr "" @@ -17971,7 +18007,7 @@ msgstr "" msgid "Do you want to submit the material request" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:108 +#: erpnext/manufacturing/doctype/job_card/job_card.js:113 msgid "Do you want to submit the stock entry?" msgstr "" @@ -18085,7 +18121,7 @@ msgstr "" msgid "Double Declining Balance" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:246 +#: erpnext/public/js/utils/serial_no_batch_selector.js:256 msgid "Download CSV Template" msgstr "" @@ -18332,7 +18368,7 @@ msgstr "" msgid "Duplicate Sales Invoices found" msgstr "" -#: erpnext/stock/serial_batch_bundle.py:1568 +#: erpnext/stock/serial_batch_bundle.py:1571 msgid "Duplicate Serial Number Error" msgstr "" @@ -18583,7 +18619,7 @@ msgstr "" msgid "Either target qty or target amount is mandatory." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:677 +#: erpnext/manufacturing/doctype/job_card/job_card.js:687 msgid "Elapsed Time" msgstr "" @@ -18684,7 +18720,7 @@ msgstr "" msgid "Email Receipt" msgstr "" -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:383 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:389 msgid "Email Sent to Supplier {0}" msgstr "" @@ -18849,7 +18885,7 @@ msgstr "" msgid "Employee Group Table" msgstr "" -#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:33 +#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:43 msgid "Employee ID" msgstr "" @@ -18864,7 +18900,7 @@ msgstr "" #: erpnext/projects/doctype/activity_cost/activity_cost.json #: erpnext/projects/doctype/timesheet/timesheet.json #: erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py:28 -#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:53 +#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:62 #: erpnext/setup/doctype/employee_group_table/employee_group_table.json msgid "Employee Name" msgstr "" @@ -18900,7 +18936,7 @@ msgstr "" msgid "Employee {0} does not belong to the company {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:377 +#: erpnext/manufacturing/doctype/job_card/job_card.py:381 msgid "Employee {0} is currently working on another workstation. Please assign another employee." msgstr "" @@ -18925,7 +18961,7 @@ msgstr "" msgid "Ems(Pica)" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2970 +#: erpnext/public/js/controllers/transaction.js:2974 msgid "Enable {0} on the Item master to proceed with {1} inspection." msgstr "" @@ -18957,7 +18993,7 @@ msgstr "" msgid "Enable Auto Email" msgstr "" -#: erpnext/stock/doctype/item/item.py:1198 +#: erpnext/stock/doctype/item/item.py:1201 msgid "Enable Auto Re-Order" msgstr "" @@ -19240,6 +19276,12 @@ msgstr "" msgid "Enabling this ensures each Purchase Invoice has a unique value in Supplier Invoice No. field within a particular fiscal year" msgstr "" +#. Description of the 'Prevent Sales Invoice when Customer is Overdue' (Check) +#. field in DocType 'Accounts Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Enabling this option prevents the creation of a new Sales Invoice when the customer has an overdue limit set and their outstanding overdue amount exceeds that limit." +msgstr "" + #. Description of the 'Book Advance Payments in Separate Party Account' (Check) #. field in DocType 'Company' #: erpnext/setup/doctype/company/company.json @@ -19281,8 +19323,7 @@ msgstr "" #. Label of the end_time (Time) field in DocType 'Stock Reposting Settings' #. Label of the end_time (Time) field in DocType 'Service Day' #. Label of the end_time (Datetime) field in DocType 'Call Log' -#: erpnext/manufacturing/doctype/job_card/job_card.js:331 -#: erpnext/manufacturing/doctype/job_card/job_card.js:399 +#: erpnext/manufacturing/doctype/job_card/job_card.js:383 #: erpnext/manufacturing/doctype/workstation_working_hour/workstation_working_hour.json #: erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.json #: erpnext/support/doctype/service_day/service_day.json @@ -19373,16 +19414,14 @@ msgstr "" msgid "Enter First and Last name of Employee, based on Which Full Name will be updated. IN transactions, it will be Full Name which will be fetched." msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:212 +#: erpnext/public/js/utils/serial_no_batch_selector.js:222 msgid "Enter Manually" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:290 +#: erpnext/public/js/utils/serial_no_batch_selector.js:300 msgid "Enter Serial Nos" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:360 -#: erpnext/manufacturing/doctype/job_card/job_card.js:422 #: erpnext/manufacturing/doctype/workstation/workstation.js:312 msgid "Enter Value" msgstr "" @@ -19407,7 +19446,7 @@ msgstr "" msgid "Enter amount to be redeemed." msgstr "" -#: erpnext/stock/doctype/item/item.js:1265 +#: erpnext/stock/doctype/item/item.js:1274 msgid "Enter an Item Code, the name will be auto-filled the same as Item Code on clicking inside the Item Name field." msgstr "" @@ -19431,7 +19470,7 @@ msgstr "" msgid "Enter discount percentage." msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:293 +#: erpnext/public/js/utils/serial_no_batch_selector.js:303 msgid "Enter each serial no in a new line" msgstr "" @@ -19464,15 +19503,15 @@ msgstr "" msgid "Enter the name of the bank or lending institution before submitting." msgstr "" -#: erpnext/stock/doctype/item/item.js:1291 +#: erpnext/stock/doctype/item/item.js:1300 msgid "Enter the opening stock units." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:999 +#: erpnext/manufacturing/doctype/bom/bom.js:1001 msgid "Enter the quantity of the Item that will be manufactured from this Bill of Materials." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1248 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1275 msgid "Enter the quantity to manufacture. Raw material Items will be fetched only when this is set." msgstr "" @@ -19628,7 +19667,7 @@ msgstr "" msgid "Example URL" msgstr "" -#: erpnext/stock/doctype/item/item.py:1110 +#: erpnext/stock/doctype/item/item.py:1113 msgid "Example of a linked document: {0}" msgstr "" @@ -19648,7 +19687,7 @@ msgstr "" msgid "Example: If the transaction amount is 200, then this will be calculated as {} = {}" msgstr "" -#: erpnext/stock/stock_ledger.py:2377 +#: erpnext/stock/stock_ledger.py:2379 msgid "Example: Serial No {0} reserved in {1}." msgstr "" @@ -19658,11 +19697,11 @@ msgstr "" msgid "Exception Budget Approver Role" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1052 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1057 msgid "Excess Disassembly" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1348 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1418 msgid "Excess Material Transfer" msgstr "" @@ -19670,7 +19709,7 @@ msgstr "" msgid "Excess Materials Consumed" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1167 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1179 msgid "Excess Transfer" msgstr "" @@ -19706,12 +19745,12 @@ msgstr "" #: erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json #: erpnext/accounts/doctype/purchase_invoice_advance/purchase_invoice_advance.json #: erpnext/accounts/doctype/sales_invoice_advance/sales_invoice_advance.json -#: erpnext/setup/doctype/company/company.py:677 +#: erpnext/setup/doctype/company/company.py:678 msgid "Exchange Gain/Loss" msgstr "" -#: erpnext/controllers/accounts_controller.py:1809 -#: erpnext/controllers/accounts_controller.py:1894 +#: erpnext/controllers/accounts_controller.py:1845 +#: erpnext/controllers/accounts_controller.py:1930 msgid "Exchange Gain/Loss amount has been booked through {0}" msgstr "" @@ -19803,6 +19842,10 @@ msgstr "" msgid "Exchange Rate must be same as {0} {1} ({2})" msgstr "" +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:356 +msgid "Exchange rate {0} does not match the exchange rate of Purchase Receipt {1}. Use the same exchange rate as the Purchase Receipt or enable {2} in {3} to adjust the landed cost based on this invoice." +msgstr "" + #. Option for the 'Entry Type' (Select) field in DocType 'Journal Entry' #. Option for the 'Journal Entry Type' (Select) field in DocType 'Journal Entry #. Template' @@ -19937,7 +19980,7 @@ msgstr "" msgid "Expected Delivery Date" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:417 +#: erpnext/selling/doctype/sales_order/sales_order.py:418 msgid "Expected Delivery Date should be after Sales Order Date" msgstr "" @@ -20013,7 +20056,7 @@ msgstr "" #: erpnext/accounts/doctype/cashier_closing/cashier_closing.json #: erpnext/accounts/doctype/ledger_merge/ledger_merge.json #: erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:611 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:651 #: erpnext/accounts/report/account_balance/account_balance.js:28 #: erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js:89 #: erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:192 @@ -20021,7 +20064,7 @@ msgstr "" msgid "Expense" msgstr "" -#: erpnext/controllers/stock_controller.py:1081 +#: erpnext/controllers/stock_controller.py:1092 msgid "Expense / Difference account ({0}) must be a 'Profit or Loss' account" msgstr "" @@ -20069,7 +20112,7 @@ msgstr "" msgid "Expense Account" msgstr "" -#: erpnext/controllers/stock_controller.py:1061 +#: erpnext/controllers/stock_controller.py:1072 msgid "Expense Account Missing" msgstr "" @@ -20084,13 +20127,13 @@ msgstr "" msgid "Expense Head" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:505 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:529 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:549 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:545 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:569 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:589 msgid "Expense Head Changed" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:607 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:647 msgid "Expense account is mandatory for item {0}" msgstr "" @@ -20122,7 +20165,7 @@ msgstr "" msgid "Expenses Added To Stock Contra Account" msgstr "" -#: erpnext/controllers/stock_controller.py:934 +#: erpnext/controllers/stock_controller.py:945 msgid "Expenses Added To Stock for Item {0}" msgstr "" @@ -20147,11 +20190,11 @@ msgstr "" msgid "Expired Batches" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:291 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:298 msgid "Expires in a week or less" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:295 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:302 msgid "Expires today or already expired" msgstr "" @@ -20216,7 +20259,7 @@ msgstr "" msgid "Extra Consumed Qty" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:264 +#: erpnext/manufacturing/doctype/job_card/job_card.py:268 msgid "Extra Job Card Quantity" msgstr "" @@ -20320,7 +20363,7 @@ msgstr "" msgid "Failed to install presets" msgstr "" -#: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py:188 +#: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py:189 msgid "Failed to parse MT940 format. Error: {0}" msgstr "" @@ -20354,7 +20397,7 @@ msgstr "" msgid "Failed to setup defaults" msgstr "" -#: erpnext/setup/doctype/company/company.py:859 +#: erpnext/setup/doctype/company/company.py:860 msgid "Failed to setup defaults for country {0}. Please contact support." msgstr "" @@ -20417,7 +20460,7 @@ msgstr "" msgid "Fees" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:395 +#: erpnext/public/js/utils/serial_no_batch_selector.js:405 msgid "Fetch Based On" msgstr "" @@ -20481,7 +20524,7 @@ msgstr "" msgid "Fetched automatically on sales orders and invoices for this customer." msgstr "" -#: erpnext/selling/page/point_of_sale/pos_item_details.js:457 +#: erpnext/selling/page/point_of_sale/pos_item_details.js:468 msgid "Fetched only {0} available serial numbers." msgstr "" @@ -20494,7 +20537,7 @@ msgid "Fetching Sales Orders..." msgstr "" #: erpnext/accounts/doctype/dunning/dunning.js:135 -#: erpnext/public/js/controllers/transaction.js:1619 +#: erpnext/public/js/controllers/transaction.js:1623 msgid "Fetching exchange rates ..." msgstr "" @@ -20807,15 +20850,15 @@ msgstr "" msgid "Finished Good Item Quantity" msgstr "" -#: erpnext/controllers/accounts_controller.py:4044 +#: erpnext/controllers/accounts_controller.py:4080 msgid "Finished Good Item is not specified for service item {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:4061 +#: erpnext/controllers/accounts_controller.py:4097 msgid "Finished Good Item {0} Qty can not be zero" msgstr "" -#: erpnext/controllers/accounts_controller.py:4055 +#: erpnext/controllers/accounts_controller.py:4091 msgid "Finished Good Item {0} must be a sub-contracted item" msgstr "" @@ -20823,6 +20866,7 @@ msgstr "" #. Label of the fg_item_qty (Float) field in DocType 'Sales Order Item' #. Label of the finished_good_qty (Float) field in DocType 'Subcontracting BOM' #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json +#: erpnext/manufacturing/doctype/work_order/work_order.js:1125 #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/subcontracting/doctype/subcontracting_bom/subcontracting_bom.json msgid "Finished Good Qty" @@ -20902,11 +20946,11 @@ msgstr "" msgid "Finished Goods based Operating Cost" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2102 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2176 msgid "Finished Item {0} does not match with Work Order {1}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1069 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1074 msgid "Finished good quantity being consumed ({0} in stock UOM) must equal the quantity to disassemble ({1}). Do not change the UOM, conversion factor or quantity of the finished good row." msgstr "" @@ -21077,7 +21121,7 @@ msgstr "" msgid "Fixed Asset Turnover Ratio" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:781 +#: erpnext/manufacturing/doctype/bom/bom.py:809 msgid "Fixed Asset item {0} cannot be used in BOMs." msgstr "" @@ -21155,7 +21199,7 @@ msgstr "" msgid "Following Material Requests have been raised automatically based on Item's re-order level" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:967 +#: erpnext/selling/doctype/customer/customer.py:968 msgid "Following fields are mandatory to create address:" msgstr "" @@ -21212,7 +21256,7 @@ msgstr "" msgid "For Item" msgstr "" -#: erpnext/controllers/stock_controller.py:1783 +#: erpnext/controllers/stock_controller.py:1794 msgid "For Item {0} cannot be received more than {1} qty against the {2} {3}" msgstr "" @@ -21222,7 +21266,7 @@ msgid "For Job Card" msgstr "" #. Label of the for_operation (Link) field in DocType 'Job Card' -#: erpnext/manufacturing/doctype/job_card/job_card.js:464 +#: erpnext/manufacturing/doctype/job_card/job_card.js:475 #: erpnext/manufacturing/doctype/job_card/job_card.json msgid "For Operation" msgstr "" @@ -21247,7 +21291,7 @@ msgstr "" msgid "For Production" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1019 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1024 msgid "For Quantity (Manufactured Qty) is mandatory" msgstr "" @@ -21257,7 +21301,7 @@ msgstr "" msgid "For Raw Materials" msgstr "" -#: erpnext/controllers/accounts_controller.py:1474 +#: erpnext/controllers/accounts_controller.py:1510 msgid "For Return Invoices with Stock effect, '0' qty Items are not allowed. Following rows are affected: {0}" msgstr "" @@ -21281,15 +21325,15 @@ msgstr "" msgid "For Warehouse" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:136 +#: erpnext/public/js/utils/serial_no_batch_selector.js:146 msgid "For Work Order" msgstr "" -#: erpnext/controllers/status_updater.py:292 +#: erpnext/controllers/status_updater.py:295 msgid "For an item {0}, quantity must be negative number" msgstr "" -#: erpnext/controllers/status_updater.py:289 +#: erpnext/controllers/status_updater.py:292 msgid "For an item {0}, quantity must be positive number" msgstr "" @@ -21337,11 +21381,11 @@ msgstr "" msgid "For legacy serial nos, do not fetch incoming rate from serial no and calculate it based on the inward transaction" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:368 +#: erpnext/manufacturing/doctype/bom/bom.py:396 msgid "For operation {0} at row {1}, please add raw materials or set a BOM against it." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2922 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2915 msgid "For operation {0}: Quantity ({1}) can not be greater than pending quantity({2})" msgstr "" @@ -21358,7 +21402,7 @@ msgstr "" msgid "For projected and forecast quantities, the system will consider all child warehouses under the selected parent warehouse." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2134 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2208 msgid "For quantity {0} should not be greater than allowed quantity {1}" msgstr "" @@ -21391,16 +21435,16 @@ msgstr "" msgid "For the convenience of customers, these codes can be used in print formats like Invoices and Delivery Notes" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1279 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1284 msgid "For the item {0}, the consumed quantity should be {1} according to the BOM {2}." msgstr "" -#: erpnext/public/js/controllers/transaction.js:1429 +#: erpnext/public/js/controllers/transaction.js:1433 msgctxt "Clear payment terms template and/or payment schedule when due date is changed" msgid "For the new {0} to take effect, would you like to clear the current {1}?" msgstr "" -#: erpnext/controllers/stock_controller.py:502 +#: erpnext/controllers/stock_controller.py:513 msgid "For the {0}, no stock is available for the return in the warehouse {1}." msgstr "" @@ -21926,7 +21970,7 @@ msgstr "" msgid "Fulfilment Terms and Conditions" msgstr "" -#: erpnext/stock/doctype/shipment/shipment.js:275 +#: erpnext/stock/doctype/shipment/shipment.js:278 msgid "Full Name, Email or Phone/Mobile of the user are mandatory to continue." msgstr "" @@ -21995,13 +22039,13 @@ msgid "Further nodes can be only created under 'Group' type nodes" msgstr "" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:188 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1238 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1270 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:177 msgid "Future Payment Amount" msgstr "" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:187 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1237 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1269 msgid "Future Payment Ref" msgstr "" @@ -22092,7 +22136,7 @@ msgstr "" #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:134 #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:220 -#: erpnext/setup/doctype/company/company.py:685 +#: erpnext/setup/doctype/company/company.py:686 msgid "Gain/Loss on Asset Disposal" msgstr "" @@ -22149,6 +22193,12 @@ msgctxt "Warehouse" msgid "General Ledger" msgstr "" +#. Label of the remarks_section (Section Break) field in DocType 'Accounts +#. Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "General Ledger Report" +msgstr "" + #. Label of the general_ledger_remarks_length (Int) field in DocType 'Accounts #. Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -22561,7 +22611,7 @@ msgstr "" msgid "Goods Transferred" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2703 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2777 msgid "Goods are already received against the outward entry {0}" msgstr "" @@ -22691,7 +22741,7 @@ msgstr "" #: erpnext/accounts/doctype/subscription/subscription.json #: erpnext/accounts/report/pos_register/pos_register.py:202 #: erpnext/accounts/report/purchase_register/purchase_register.py:291 -#: erpnext/accounts/report/sales_register/sales_register.py:319 +#: erpnext/accounts/report/sales_register/sales_register.py:328 #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json @@ -23192,7 +23242,7 @@ msgstr "" msgid "Here are the error logs for the aforementioned failed depreciation entries: {0}" msgstr "" -#: erpnext/stock/stock_ledger.py:2080 +#: erpnext/stock/stock_ledger.py:2082 msgid "Here are the options to proceed:" msgstr "" @@ -23427,7 +23477,7 @@ msgstr "" msgid "Hrs" msgstr "" -#: erpnext/setup/doctype/company/company.py:496 +#: erpnext/setup/doctype/company/company.py:497 msgid "Human Resources" msgstr "" @@ -23851,7 +23901,7 @@ msgstr "" msgid "If no taxes are set, and Taxes and Charges Template is selected, the system will automatically apply the taxes from the chosen template." msgstr "" -#: erpnext/stock/stock_ledger.py:2090 +#: erpnext/stock/stock_ledger.py:2092 msgid "If not, you can Cancel / Submit this entry" msgstr "" @@ -23888,7 +23938,7 @@ msgstr "" msgid "If set, the system does not use the user's Email or the standard outgoing Email account for sending request for quotations." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1281 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1308 msgid "If the BOM results in Scrap material, the Scrap Warehouse needs to be selected." msgstr "" @@ -23897,7 +23947,7 @@ msgstr "" msgid "If the account is frozen, entries are allowed to restricted users." msgstr "" -#: erpnext/stock/stock_ledger.py:2083 +#: erpnext/stock/stock_ledger.py:2085 msgid "If the item is transacting as a Zero Valuation Rate item in this entry, please enable 'Allow Zero Valuation Rate' in the {0} Item table." msgstr "" @@ -23907,7 +23957,7 @@ msgstr "" msgid "If the reorder check is set at the Group warehouse level, the available quantity becomes the sum of the projected quantities of all its child warehouses." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1300 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1327 msgid "If the selected BOM has Operations mentioned in it, the system will fetch all Operations from BOM, these values can be changed." msgstr "" @@ -23984,7 +24034,7 @@ msgstr "" msgid "If yes, then this warehouse will be used to store rejected materials" msgstr "" -#: erpnext/stock/doctype/item/item.js:1277 +#: erpnext/stock/doctype/item/item.js:1286 msgid "If you are maintaining stock of this Item in your Inventory, ERPNext will make a stock ledger entry for each transaction of this item." msgstr "" @@ -24219,7 +24269,7 @@ msgstr "" msgid "Import MT940 Fromat" msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:144 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:132 msgid "Import Successful" msgstr "" @@ -24234,7 +24284,7 @@ msgstr "" msgid "Import Supplier Invoice" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:228 +#: erpnext/public/js/utils/serial_no_batch_selector.js:238 #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js:84 msgid "Import Using CSV file" msgstr "" @@ -24464,7 +24514,7 @@ msgstr "" msgid "In this case, the amount will be calculated as 25% of the transaction amount. If the transaction amount is 200, then this will be calculated as 200 * 0.25 = 50." msgstr "" -#: erpnext/stock/doctype/item/item.js:1310 +#: erpnext/stock/doctype/item/item.js:1319 msgid "In this section, you can define Company-wide transaction-related defaults for this Item. Eg. Default Warehouse, Default Price List, Supplier, etc." msgstr "" @@ -24555,7 +24605,7 @@ msgstr "" msgid "Include Default FB Entries" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:90 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:101 msgid "Include Expired" msgstr "" @@ -24821,7 +24871,7 @@ msgstr "" msgid "Incorrect Company" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1286 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1291 msgid "Incorrect Component Quantity" msgstr "" @@ -25035,14 +25085,14 @@ msgstr "" msgid "Inspected By" msgstr "" -#: erpnext/controllers/stock_controller.py:1677 -#: erpnext/manufacturing/doctype/job_card/job_card.py:834 +#: erpnext/controllers/stock_controller.py:1688 +#: erpnext/manufacturing/doctype/job_card/job_card.py:838 msgid "Inspection Rejected" msgstr "" #. Label of the inspection_required (Check) field in DocType 'Stock Entry' -#: erpnext/controllers/stock_controller.py:1647 -#: erpnext/controllers/stock_controller.py:1649 +#: erpnext/controllers/stock_controller.py:1658 +#: erpnext/controllers/stock_controller.py:1660 #: erpnext/stock/doctype/stock_entry/stock_entry.json msgid "Inspection Required" msgstr "" @@ -25059,8 +25109,8 @@ msgstr "" msgid "Inspection Required before Purchase" msgstr "" -#: erpnext/controllers/stock_controller.py:1662 -#: erpnext/manufacturing/doctype/job_card/job_card.py:815 +#: erpnext/controllers/stock_controller.py:1673 +#: erpnext/manufacturing/doctype/job_card/job_card.py:819 msgid "Inspection Submission" msgstr "" @@ -25129,11 +25179,11 @@ msgstr "" msgid "Insufficient Capacity" msgstr "" -#: erpnext/controllers/accounts_controller.py:3940 -#: erpnext/controllers/accounts_controller.py:3962 -#: erpnext/controllers/accounts_controller.py:4480 -#: erpnext/controllers/accounts_controller.py:4486 -#: erpnext/controllers/accounts_controller.py:4508 +#: erpnext/controllers/accounts_controller.py:3976 +#: erpnext/controllers/accounts_controller.py:3998 +#: erpnext/controllers/accounts_controller.py:4516 +#: erpnext/controllers/accounts_controller.py:4522 +#: erpnext/controllers/accounts_controller.py:4544 msgid "Insufficient Permissions" msgstr "" @@ -25141,13 +25191,13 @@ msgstr "" #: erpnext/stock/doctype/pick_list/pick_list.py:150 #: erpnext/stock/doctype/pick_list/pick_list.py:168 #: erpnext/stock/doctype/pick_list/pick_list.py:1123 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1256 -#: erpnext/stock/serial_batch_bundle.py:1311 erpnext/stock/stock_ledger.py:1771 -#: erpnext/stock/stock_ledger.py:2268 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1261 +#: erpnext/stock/serial_batch_bundle.py:1314 erpnext/stock/stock_ledger.py:1773 +#: erpnext/stock/stock_ledger.py:2270 msgid "Insufficient Stock" msgstr "" -#: erpnext/stock/stock_ledger.py:2283 +#: erpnext/stock/stock_ledger.py:2285 msgid "Insufficient Stock for Batch" msgstr "" @@ -25310,7 +25360,7 @@ msgstr "" msgid "Internal Purchase Order" msgstr "" -#: erpnext/controllers/accounts_controller.py:836 +#: erpnext/controllers/accounts_controller.py:872 msgid "Internal Sale or Delivery Reference missing." msgstr "" @@ -25318,7 +25368,7 @@ msgstr "" msgid "Internal Sales Order" msgstr "" -#: erpnext/controllers/accounts_controller.py:838 +#: erpnext/controllers/accounts_controller.py:874 msgid "Internal Sales Reference Missing" msgstr "" @@ -25349,7 +25399,7 @@ msgstr "" msgid "Internal Transfer" msgstr "" -#: erpnext/controllers/accounts_controller.py:847 +#: erpnext/controllers/accounts_controller.py:883 msgid "Internal Transfer Reference Missing" msgstr "" @@ -25373,7 +25423,7 @@ msgstr "" msgid "Internal notes about this customer. Not visible on transactions or the portal." msgstr "" -#: erpnext/controllers/stock_controller.py:1744 +#: erpnext/controllers/stock_controller.py:1755 msgid "Internal transfers can only be done in company's default currency" msgstr "" @@ -25387,14 +25437,14 @@ msgstr "" msgid "Interval should be between 1 to 59 MInutes" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:394 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:402 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:434 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:442 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1073 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1083 #: erpnext/assets/doctype/asset_category/asset_category.py:69 #: erpnext/assets/doctype/asset_category/asset_category.py:97 -#: erpnext/controllers/accounts_controller.py:3250 -#: erpnext/controllers/accounts_controller.py:3258 +#: erpnext/controllers/accounts_controller.py:3286 +#: erpnext/controllers/accounts_controller.py:3294 msgid "Invalid Account" msgstr "" @@ -25415,11 +25465,11 @@ msgstr "" msgid "Invalid Attribute" msgstr "" -#: erpnext/stock/doctype/item/item.js:904 +#: erpnext/stock/doctype/item/item.js:913 msgid "Invalid Attribute Values" msgstr "" -#: erpnext/controllers/accounts_controller.py:650 +#: erpnext/controllers/accounts_controller.py:669 msgid "Invalid Auto Repeat Date" msgstr "" @@ -25432,7 +25482,7 @@ msgstr "" msgid "Invalid Barcode. There is no Item attached to this barcode." msgstr "" -#: erpnext/public/js/controllers/transaction.js:3191 +#: erpnext/public/js/controllers/transaction.js:3195 msgid "Invalid Blanket Order for the selected Customer and Item" msgstr "" @@ -25454,7 +25504,7 @@ msgstr "" #: erpnext/assets/doctype/asset/asset.py:365 #: erpnext/assets/doctype/asset/asset.py:372 -#: erpnext/controllers/accounts_controller.py:3273 +#: erpnext/controllers/accounts_controller.py:3309 msgid "Invalid Cost Center" msgstr "" @@ -25462,16 +25512,16 @@ msgstr "" msgid "Invalid Customer Group" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:419 +#: erpnext/selling/doctype/sales_order/sales_order.py:420 msgid "Invalid Delivery Date" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1108 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1113 msgid "Invalid Disassembly Item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1074 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1123 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1079 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1128 msgid "Invalid Disassembly Quantity" msgstr "" @@ -25479,7 +25529,7 @@ msgstr "" msgid "Invalid Discount" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:861 +#: erpnext/controllers/taxes_and_totals.py:900 msgid "Invalid Discount Amount" msgstr "" @@ -25499,8 +25549,8 @@ msgstr "" msgid "Invalid File Type" msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:374 -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:379 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:377 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:382 msgid "Invalid Formula" msgstr "" @@ -25513,7 +25563,7 @@ msgstr "" msgid "Invalid Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:1544 +#: erpnext/stock/doctype/item/item.py:1547 msgid "Invalid Item Defaults" msgstr "" @@ -25561,7 +25611,7 @@ msgstr "" msgid "Invalid Priority" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1276 +#: erpnext/manufacturing/doctype/bom/bom.py:1297 msgid "Invalid Process Loss Configuration" msgstr "" @@ -25569,12 +25619,12 @@ msgstr "" msgid "Invalid Purchase Invoice" msgstr "" -#: erpnext/controllers/accounts_controller.py:3982 -#: erpnext/controllers/accounts_controller.py:3996 +#: erpnext/controllers/accounts_controller.py:4018 +#: erpnext/controllers/accounts_controller.py:4032 msgid "Invalid Qty" msgstr "" -#: erpnext/controllers/accounts_controller.py:1492 +#: erpnext/controllers/accounts_controller.py:1528 msgid "Invalid Quantity" msgstr "" @@ -25582,7 +25632,7 @@ msgstr "" msgid "Invalid Query" msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:325 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:328 msgid "Invalid Reading" msgstr "" @@ -25603,12 +25653,12 @@ msgstr "" msgid "Invalid Selling Price" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2177 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2251 msgid "Invalid Serial and Batch Bundle" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1375 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1397 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1445 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1467 msgid "Invalid Source and Target Warehouse" msgstr "" @@ -25809,7 +25859,7 @@ msgstr "" msgid "Invoice Document Type Selection Error" msgstr "" -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1218 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1250 msgid "Invoice Grand Total" msgstr "" @@ -25911,14 +25961,14 @@ msgstr "" msgid "Invoice can't be made for zero billing hour" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1933 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1971 msgid "Invoice is not blocked. Block the invoice to change the release date." msgstr "" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:171 #: erpnext/accounts/report/accounts_payable/accounts_payable.html:139 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.html:140 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1220 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1252 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:164 #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py:194 msgid "Invoiced Amount" @@ -26339,7 +26389,7 @@ msgstr "" #: erpnext/manufacturing/doctype/bom_creator/bom_creator.json #: erpnext/manufacturing/doctype/bom_creator_item/bom_creator_item.json #: erpnext/manufacturing/doctype/bom_item/bom_item.json -#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:68 +#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:74 msgid "Is Phantom Item" msgstr "" @@ -26626,7 +26676,7 @@ msgstr "" msgid "It can take upto few hours for accurate stock values to be visible after merging items." msgstr "" -#: erpnext/public/js/controllers/transaction.js:2569 +#: erpnext/public/js/controllers/transaction.js:2573 msgid "It is needed to fetch Item Details." msgstr "" @@ -26690,12 +26740,12 @@ msgstr "" #: erpnext/buying/report/procurement_tracker/procurement_tracker.py:60 #: erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js:49 #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:33 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:204 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:211 #: erpnext/buying/workspace/buying/buying.json -#: erpnext/controllers/taxes_and_totals.py:1253 +#: erpnext/controllers/taxes_and_totals.py:1293 #: erpnext/controllers/trends.py:377 #: erpnext/manufacturing/doctype/blanket_order/blanket_order.json -#: erpnext/manufacturing/doctype/bom/bom.js:1092 +#: erpnext/manufacturing/doctype/bom/bom.js:1094 #: erpnext/manufacturing/doctype/plant_floor/plant_floor.js:109 #: erpnext/manufacturing/doctype/workstation/workstation_job_card.html:25 #: erpnext/manufacturing/report/bom_stock_analysis/bom_stock_analysis.py:101 @@ -26992,7 +27042,7 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order_item/work_order_item.json #: erpnext/manufacturing/doctype/workstation/workstation.js:471 #: erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js:163 -#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:60 +#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:66 #: erpnext/manufacturing/report/bom_operations_time/bom_operations_time.js:8 #: erpnext/manufacturing/report/bom_operations_time/bom_operations_time.py:103 #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.py:100 @@ -27006,11 +27056,11 @@ msgstr "" #: erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py:86 #: erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.py:119 #: erpnext/projects/doctype/timesheet/timesheet.js:216 -#: erpnext/public/js/controllers/transaction.js:2863 +#: erpnext/public/js/controllers/transaction.js:2867 #: erpnext/public/js/stock_reservation.js:112 #: erpnext/public/js/stock_reservation.js:318 erpnext/public/js/utils.js:596 #: erpnext/public/js/utils.js:754 -#: erpnext/public/js/utils/serial_no_batch_selector.js:96 +#: erpnext/public/js/utils/serial_no_batch_selector.js:106 #: erpnext/regional/doctype/import_supplier_invoice/import_supplier_invoice.json #: erpnext/selling/doctype/delivery_schedule_item/delivery_schedule_item.json #: erpnext/selling/doctype/installation_note_item/installation_note_item.json @@ -27102,12 +27152,12 @@ msgstr "" msgid "Item Code cannot be changed for Serial No." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:461 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:501 msgid "Item Code required at Row No {0}" msgstr "" #: erpnext/selling/page/point_of_sale/pos_controller.js:816 -#: erpnext/selling/page/point_of_sale/pos_item_details.js:277 +#: erpnext/selling/page/point_of_sale/pos_item_details.js:288 msgid "Item Code: {0} is not available under warehouse {1}." msgstr "" @@ -27135,7 +27185,7 @@ msgstr "" #. Label of the item_details (Section Break) field in DocType 'Material Request #. Plan Item' #. Label of the description (Small Text) field in DocType 'Work Order' -#. Label of the item_description (Text) field in DocType 'Item Price' +#. Label of the item_description (Text Editor) field in DocType 'Item Price' #. Label of the item_description (Small Text) field in DocType 'Quick Stock #. Balance' #: erpnext/manufacturing/doctype/bom/bom.json @@ -27483,7 +27533,7 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.json #: erpnext/manufacturing/doctype/work_order_item/work_order_item.json #: erpnext/manufacturing/notification/material_request_receipt_notification/material_request_receipt_notification.html:8 -#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:66 +#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:72 #: erpnext/manufacturing/report/bom_operations_time/bom_operations_time.py:109 #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.py:106 #: erpnext/manufacturing/report/job_card_summary/job_card_summary.py:158 @@ -27493,7 +27543,7 @@ msgstr "" #: erpnext/manufacturing/report/production_planning_report/production_planning_report.py:371 #: erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py:92 #: erpnext/manufacturing/report/work_order_consumed_materials/work_order_consumed_materials.py:138 -#: erpnext/public/js/controllers/transaction.js:2869 +#: erpnext/public/js/controllers/transaction.js:2873 #: erpnext/public/js/utils.js:852 #: erpnext/selling/doctype/quotation_item/quotation_item.json #: erpnext/selling/doctype/sales_order/sales_order.js:1286 @@ -27589,8 +27639,8 @@ msgstr "" msgid "Item Price Stock" msgstr "" -#: erpnext/stock/get_item_details.py:1143 -#: erpnext/stock/get_item_details.py:1167 +#: erpnext/stock/get_item_details.py:1228 +#: erpnext/stock/get_item_details.py:1252 msgid "Item Price added for {0} in Price List - {1}" msgstr "" @@ -27602,7 +27652,7 @@ msgstr "" msgid "Item Price created at rate {0}" msgstr "" -#: erpnext/stock/get_item_details.py:1126 +#: erpnext/stock/get_item_details.py:1211 msgid "Item Price updated for {0} in Price List {1}" msgstr "" @@ -27784,7 +27834,7 @@ msgstr "" #. Name of a DocType #. Label of a Link in the Stock Workspace #. Label of a Workspace Sidebar Item -#: erpnext/stock/doctype/item/item.js:209 +#: erpnext/stock/doctype/item/item.js:215 #: erpnext/stock/doctype/item_variant_settings/item_variant_settings.json #: erpnext/stock/workspace/stock/stock.json #: erpnext/workspace_sidebar/erpnext_settings.json @@ -27792,7 +27842,7 @@ msgstr "" msgid "Item Variant Settings" msgstr "" -#: erpnext/stock/doctype/item/item.js:1126 +#: erpnext/stock/doctype/item/item.js:1135 msgid "Item Variant {0} already exists with same attributes" msgstr "" @@ -27882,7 +27932,7 @@ msgstr "" msgid "Item Wise Tax Details" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:568 +#: erpnext/controllers/taxes_and_totals.py:574 msgid "Item Wise Tax Details do not match with Taxes and Charges at the following rows:" msgstr "" @@ -27902,7 +27952,7 @@ msgstr "" msgid "Item and Warranty Details" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3891 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4016 msgid "Item for row {0} does not match Material Request" msgstr "" @@ -27914,7 +27964,7 @@ msgstr "" msgid "Item is mandatory in Raw Materials table." msgstr "" -#: erpnext/selling/page/point_of_sale/pos_item_details.js:110 +#: erpnext/selling/page/point_of_sale/pos_item_details.js:121 msgid "Item is removed since no serial / batch no selected." msgstr "" @@ -27932,11 +27982,11 @@ msgstr "" msgid "Item operation" msgstr "" -#: erpnext/controllers/accounts_controller.py:4036 +#: erpnext/controllers/accounts_controller.py:4072 msgid "Item qty can not be updated as raw materials are already processed." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1531 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1601 msgid "Item rate has been updated to zero as Allow Zero Valuation Rate is checked for item {0}" msgstr "" @@ -27959,7 +28009,7 @@ msgstr "" msgid "Item valuation reposting in progress. Report might show incorrect item valuation." msgstr "" -#: erpnext/stock/doctype/item/item.py:1062 +#: erpnext/stock/doctype/item/item.py:1065 msgid "Item variant {0} exists with same attributes" msgstr "" @@ -27989,11 +28039,11 @@ msgstr "" msgid "Item {0} does not exist" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:709 +#: erpnext/manufacturing/doctype/bom/bom.py:737 msgid "Item {0} does not exist in the system or has expired" msgstr "" -#: erpnext/controllers/stock_controller.py:616 +#: erpnext/controllers/stock_controller.py:627 msgid "Item {0} does not exist." msgstr "" @@ -28009,7 +28059,7 @@ msgstr "" msgid "Item {0} has been disabled" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:788 +#: erpnext/selling/doctype/sales_order/sales_order.py:789 msgid "Item {0} has no Serial No. Only serialized items can have delivery based on Serial No" msgstr "" @@ -28017,7 +28067,7 @@ msgstr "" msgid "Item {0} has no changes in delivered quantity. Please unselect the row if you do not wish to update its quantity." msgstr "" -#: erpnext/stock/doctype/item/item.py:1260 +#: erpnext/stock/doctype/item/item.py:1263 msgid "Item {0} has reached its end of life on {1}" msgstr "" @@ -28029,11 +28079,11 @@ msgstr "" msgid "Item {0} is already reserved/delivered against Sales Order {1}." msgstr "" -#: erpnext/stock/doctype/item/item.py:1280 +#: erpnext/stock/doctype/item/item.py:1283 msgid "Item {0} is cancelled" msgstr "" -#: erpnext/stock/doctype/item/item.py:1264 +#: erpnext/stock/doctype/item/item.py:1267 msgid "Item {0} is disabled" msgstr "" @@ -28045,7 +28095,7 @@ msgstr "" msgid "Item {0} is not a serialized Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:1272 +#: erpnext/stock/doctype/item/item.py:1275 msgid "Item {0} is not a stock Item" msgstr "" @@ -28057,7 +28107,7 @@ msgstr "" msgid "Item {0} is not a template item." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2615 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2689 msgid "Item {0} is not active or end of life has been reached" msgstr "" @@ -28065,11 +28115,11 @@ msgstr "" msgid "Item {0} must be a Fixed Asset Item" msgstr "" -#: erpnext/stock/get_item_details.py:351 +#: erpnext/stock/get_item_details.py:436 msgid "Item {0} must be a Non-Stock Item" msgstr "" -#: erpnext/stock/get_item_details.py:348 +#: erpnext/stock/get_item_details.py:433 msgid "Item {0} must be a Sub-contracted Item" msgstr "" @@ -28077,7 +28127,7 @@ msgstr "" msgid "Item {0} must be a non-stock item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1913 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1987 msgid "Item {0} not found in 'Raw Materials Supplied' table in {1} {2}" msgstr "" @@ -28093,7 +28143,7 @@ msgstr "" msgid "Item {0}: {1} qty produced. " msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1337 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1344 msgid "Item {} does not exist." msgstr "" @@ -28139,11 +28189,11 @@ msgstr "" msgid "Item-wise sales Register" msgstr "" -#: erpnext/stock/get_item_details.py:731 +#: erpnext/stock/get_item_details.py:816 msgid "Item/Item Code required to get Item Tax Template." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:452 +#: erpnext/manufacturing/doctype/bom/bom.py:480 msgid "Item: {0} does not exist in the system" msgstr "" @@ -28187,11 +28237,11 @@ msgstr "" msgid "Items and Pricing" msgstr "" -#: erpnext/controllers/accounts_controller.py:4294 +#: erpnext/controllers/accounts_controller.py:4330 msgid "Items cannot be updated as Subcontracting Inward Order(s) exist against this Subcontracted Sales Order." msgstr "" -#: erpnext/controllers/accounts_controller.py:4287 +#: erpnext/controllers/accounts_controller.py:4323 msgid "Items cannot be updated as Subcontracting Order is created against the Purchase Order {0}." msgstr "" @@ -28203,7 +28253,7 @@ msgstr "" msgid "Items not found." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1527 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1597 msgid "Items rate has been updated to zero as Allow Zero Valuation Rate is checked for the following items: {0}" msgstr "" @@ -28233,7 +28283,7 @@ msgstr "" msgid "Items under this warehouse will be suggested" msgstr "" -#: erpnext/controllers/stock_controller.py:221 +#: erpnext/controllers/stock_controller.py:223 msgid "Items {0} do not exist in the Item master." msgstr "" @@ -28278,7 +28328,7 @@ msgstr "" #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/manufacturing/doctype/bom/bom.json #: erpnext/manufacturing/doctype/job_card/job_card.json -#: erpnext/manufacturing/doctype/job_card/job_card.py:1030 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1036 #: erpnext/manufacturing/doctype/operation/operation.json #: erpnext/manufacturing/doctype/work_order/work_order.js:408 #: erpnext/manufacturing/doctype/work_order/work_order.json @@ -28307,7 +28357,7 @@ msgstr "" msgid "Job Card Item" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:877 +#: erpnext/manufacturing/doctype/job_card/job_card.py:884 msgid "Job Card On Hold" msgstr "" @@ -28346,10 +28396,14 @@ msgstr "" msgid "Job Card and Capacity Planning" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1561 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1692 msgid "Job Card {0} has been completed" msgstr "" +#: erpnext/manufacturing/doctype/job_card/job_card.py:1483 +msgid "Job Card {0}: As per the sequence of the operations in the work order {1}, submit the manufacturing entry for the operation {2} before the operation {3}." +msgstr "" + #. Label of the dashboard_tab (Tab Break) field in DocType 'Workstation' #: erpnext/manufacturing/doctype/workstation/workstation.json msgid "Job Cards" @@ -28422,7 +28476,7 @@ msgstr "" msgid "Job Worker Warehouse" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2977 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2970 msgid "Job card {0} created" msgstr "" @@ -28643,7 +28697,7 @@ msgstr "" msgid "Kilowatt-Hour" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1032 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1038 msgid "Kindly cancel the Manufacturing Entries first against the work order {0}." msgstr "" @@ -28958,7 +29012,7 @@ msgstr "" msgid "Lead Time" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:266 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:273 msgid "Lead Time (Days)" msgstr "" @@ -29265,7 +29319,7 @@ msgstr "" msgid "Linked Location" msgstr "" -#: erpnext/stock/doctype/item/item.py:1114 +#: erpnext/stock/doctype/item/item.py:1117 msgid "Linked with submitted documents" msgstr "" @@ -29608,7 +29662,7 @@ msgstr "" msgid "MRP Log documents are being created in the background." msgstr "" -#: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py:181 +#: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py:182 msgid "MT940 file detected. Please enable 'Import MT940 Format' to proceed." msgstr "" @@ -29632,10 +29686,10 @@ msgstr "" msgid "Machine operator errors" msgstr "" -#: erpnext/setup/doctype/company/company.py:723 -#: erpnext/setup/doctype/company/company.py:738 +#: erpnext/setup/doctype/company/company.py:724 #: erpnext/setup/doctype/company/company.py:739 #: erpnext/setup/doctype/company/company.py:740 +#: erpnext/setup/doctype/company/company.py:741 msgid "Main" msgstr "" @@ -29878,7 +29932,7 @@ msgstr "" #. Label of the make (Data) field in DocType 'Vehicle' #: erpnext/accounts/doctype/journal_entry/journal_entry.js:127 -#: erpnext/manufacturing/doctype/job_card/job_card.js:479 +#: erpnext/manufacturing/doctype/job_card/job_card.js:490 #: erpnext/manufacturing/doctype/work_order/work_order.js:855 #: erpnext/manufacturing/doctype/work_order/work_order.js:889 #: erpnext/setup/doctype/vehicle/vehicle.json @@ -29934,12 +29988,12 @@ msgstr "" msgid "Make Serial No / Batch from Work Order" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:106 +#: erpnext/manufacturing/doctype/job_card/job_card.js:111 #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.js:256 msgid "Make Stock Entry" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:368 +#: erpnext/manufacturing/doctype/job_card/job_card.js:419 msgid "Make Subcontracting PO" msgstr "" @@ -29955,11 +30009,11 @@ msgstr "" msgid "Make project from a template." msgstr "" -#: erpnext/stock/doctype/item/item.js:921 +#: erpnext/stock/doctype/item/item.js:930 msgid "Make {0} Variant" msgstr "" -#: erpnext/stock/doctype/item/item.js:922 +#: erpnext/stock/doctype/item/item.js:931 msgid "Make {0} Variants" msgstr "" @@ -29982,7 +30036,7 @@ msgstr "" msgid "Manage your orders" msgstr "" -#: erpnext/setup/doctype/company/company.py:502 +#: erpnext/setup/doctype/company/company.py:503 msgid "Management" msgstr "" @@ -30024,11 +30078,11 @@ msgstr "" msgid "Mandatory Missing" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:644 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:684 msgid "Mandatory Purchase Order" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:666 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:706 msgid "Mandatory Purchase Receipt" msgstr "" @@ -30103,8 +30157,8 @@ msgstr "" #: erpnext/stock/doctype/material_request_item/material_request_item.json #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json #: erpnext/stock/doctype/stock_entry/stock_entry.json -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1668 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1684 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1742 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1758 #: erpnext/stock/doctype/stock_entry_type/stock_entry_type.json #: erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json @@ -30254,7 +30308,7 @@ msgstr "" msgid "Manufacturing Manager" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2973 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3047 msgid "Manufacturing Quantity is mandatory" msgstr "" @@ -30443,7 +30497,7 @@ msgstr "" msgid "Market Segment" msgstr "" -#: erpnext/setup/doctype/company/company.py:454 +#: erpnext/setup/doctype/company/company.py:455 msgid "Marketing" msgstr "" @@ -30534,7 +30588,7 @@ msgstr "" #. Option for the 'Purpose' (Select) field in DocType 'Stock Entry Type' #: erpnext/setup/setup_wizard/operations/install_fixtures.py:117 #: erpnext/stock/doctype/stock_entry/stock_entry.json -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1669 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1743 #: erpnext/stock/doctype/stock_entry_type/stock_entry_type.json msgid "Material Consumption for Manufacture" msgstr "" @@ -30615,7 +30669,7 @@ msgstr "" #: erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js:33 #: erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.py:184 #: erpnext/buying/workspace/buying/buying.json -#: erpnext/manufacturing/doctype/job_card/job_card.js:216 +#: erpnext/manufacturing/doctype/job_card/job_card.js:221 #: erpnext/manufacturing/doctype/production_plan/production_plan.js:159 #: erpnext/manufacturing/doctype/production_plan/production_plan.json #: erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json @@ -30714,11 +30768,11 @@ msgstr "" msgid "Material Request Type" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1119 +#: erpnext/selling/doctype/sales_order/sales_order.py:1120 msgid "Material Request already created for the ordered quantity" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1851 +#: erpnext/selling/doctype/sales_order/sales_order.py:1883 msgid "Material Request not created, as quantity for Raw Materials already available." msgstr "" @@ -30786,7 +30840,7 @@ msgstr "" #. Option for the 'Purpose' (Select) field in DocType 'Pick List' #. Option for the 'Purpose' (Select) field in DocType 'Stock Entry' #. Option for the 'Purpose' (Select) field in DocType 'Stock Entry Type' -#: erpnext/manufacturing/doctype/job_card/job_card.js:224 +#: erpnext/manufacturing/doctype/job_card/job_card.js:229 #: erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json #: erpnext/setup/setup_wizard/operations/install_fixtures.py:86 #: erpnext/stock/doctype/item/item.json @@ -30857,8 +30911,8 @@ msgstr "" msgid "Materials are already received against the {0} {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:185 -#: erpnext/manufacturing/doctype/job_card/job_card.py:855 +#: erpnext/manufacturing/doctype/job_card/job_card.py:189 +#: erpnext/manufacturing/doctype/job_card/job_card.py:862 msgid "Materials needs to be transferred to the work in progress warehouse for the job card {0}" msgstr "" @@ -30929,9 +30983,9 @@ msgstr "" msgid "Max discount allowed for item: {0} is {1}%" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1056 -#: erpnext/manufacturing/doctype/work_order/work_order.js:1063 -#: erpnext/manufacturing/doctype/work_order/work_order.js:1086 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1065 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1072 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1100 #: erpnext/stock/doctype/pick_list/pick_list.js:208 #: erpnext/stock/doctype/stock_entry/stock_entry.js:404 msgid "Max: {0}" @@ -30963,11 +31017,11 @@ msgstr "" msgid "Maximum Producible Items" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:4507 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4632 msgid "Maximum Samples - {0} can be retained for Batch {1} and Item {2}." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:4498 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4623 msgid "Maximum Samples - {0} have already been retained for Batch {1} and Item {2} in Batch {3}." msgstr "" @@ -31028,7 +31082,7 @@ msgstr "" msgid "Megawatt" msgstr "" -#: erpnext/stock/stock_ledger.py:2096 +#: erpnext/stock/stock_ledger.py:2098 msgid "Mention Valuation Rate in the Item master." msgstr "" @@ -31125,7 +31179,7 @@ msgstr "" msgid "Meter/Second" msgstr "" -#: erpnext/manufacturing/doctype/workstation/workstation.py:547 +#: erpnext/manufacturing/doctype/workstation/workstation.py:546 msgid "Method {0} is not allowed to be run on a Job Card." msgstr "" @@ -31311,7 +31365,7 @@ msgstr "" msgid "Min Qty should be greater than Recurse Over Qty" msgstr "" -#: erpnext/stock/doctype/item/item.js:1077 +#: erpnext/stock/doctype/item/item.js:1086 msgid "Min Value: {0}, Max Value: {1}, in Increments of: {2}" msgstr "" @@ -31414,13 +31468,13 @@ msgstr "" msgid "Mismatch" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1338 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1345 msgid "Missing" msgstr "" #: erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.py:97 #: erpnext/accounts/doctype/pos_profile/pos_profile.py:200 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:603 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:643 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2484 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:3100 #: erpnext/assets/doctype/asset_category/asset_category.py:116 @@ -31452,15 +31506,15 @@ msgstr "" msgid "Missing Finance Book" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2112 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2186 msgid "Missing Finished Good" msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:359 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:362 msgid "Missing Formula" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1293 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1298 msgid "Missing Item" msgstr "" @@ -31476,7 +31530,7 @@ msgstr "" msgid "Missing Required Filter" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:300 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:308 msgid "Missing Serial No Bundle" msgstr "" @@ -31492,8 +31546,8 @@ msgstr "" msgid "Missing required filter: {0}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1219 -#: erpnext/manufacturing/doctype/work_order/work_order.py:1646 +#: erpnext/manufacturing/doctype/bom/bom.py:1240 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1639 msgid "Missing value" msgstr "" @@ -31507,7 +31561,7 @@ msgstr "" #: erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py:216 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:248 #: erpnext/accounts/report/purchase_register/purchase_register.py:217 -#: erpnext/accounts/report/sales_register/sales_register.py:238 +#: erpnext/accounts/report/sales_register/sales_register.py:247 msgid "Mode Of Payment" msgstr "" @@ -31760,7 +31814,7 @@ msgstr "" msgid "Multiple Tier Program" msgstr "" -#: erpnext/stock/doctype/item/item.js:233 +#: erpnext/stock/doctype/item/item.js:239 msgid "Multiple Variants" msgstr "" @@ -31768,11 +31822,11 @@ msgstr "" msgid "Multiple company fields available: {0}. Please select manually." msgstr "" -#: erpnext/controllers/accounts_controller.py:1338 +#: erpnext/controllers/accounts_controller.py:1374 msgid "Multiple fiscal years exist for the date {0}. Please set company in Fiscal Year" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2119 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2193 msgid "Multiple items cannot be marked as finished item" msgstr "" @@ -31781,10 +31835,10 @@ msgid "Music" msgstr "" #. Label of the must_be_whole_number (Check) field in DocType 'UOM' -#: erpnext/manufacturing/doctype/work_order/work_order.py:1593 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1586 #: erpnext/setup/doctype/uom/uom.json #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:267 -#: erpnext/utilities/transaction_base.py:631 +#: erpnext/utilities/transaction_base.py:645 msgid "Must be Whole Number" msgstr "" @@ -31924,7 +31978,7 @@ msgid "Negative Stock" msgstr "" #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1724 -#: erpnext/stock/serial_batch_bundle.py:1634 +#: erpnext/stock/serial_batch_bundle.py:1637 msgid "Negative Stock Error" msgstr "" @@ -32183,7 +32237,7 @@ msgstr "" #: erpnext/accounts/doctype/subscription/subscription.json #: erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.json #: erpnext/accounts/report/purchase_register/purchase_register.py:269 -#: erpnext/accounts/report/sales_register/sales_register.py:299 +#: erpnext/accounts/report/sales_register/sales_register.py:308 #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/selling/doctype/quotation/quotation.json @@ -32234,7 +32288,7 @@ msgstr "" msgid "Net Weight UOM" msgstr "" -#: erpnext/controllers/accounts_controller.py:1698 +#: erpnext/controllers/accounts_controller.py:1734 msgid "Net total calculation precision loss" msgstr "" @@ -32501,11 +32555,11 @@ msgstr "" msgid "No Impact on Accounting Ledger" msgstr "" -#: erpnext/stock/get_item_details.py:322 +#: erpnext/stock/get_item_details.py:407 msgid "No Item with Barcode {0}" msgstr "" -#: erpnext/stock/get_item_details.py:326 +#: erpnext/stock/get_item_details.py:411 msgid "No Item with Serial No {0}" msgstr "" @@ -32544,7 +32598,7 @@ msgstr "" #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1593 #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1653 #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1667 -#: erpnext/stock/doctype/item/item.py:1505 +#: erpnext/stock/doctype/item/item.py:1508 msgid "No Permission" msgstr "" @@ -32589,7 +32643,7 @@ msgstr "" msgid "No Tax withholding account set for Company {0} in Tax Withholding Category {1}." msgstr "" -#: erpnext/accounts/report/gross_profit/gross_profit.py:998 +#: erpnext/accounts/report/gross_profit/gross_profit.py:1092 msgid "No Terms" msgstr "" @@ -32610,7 +32664,7 @@ msgstr "" msgid "No account set" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:822 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:826 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:905 msgid "No accounting entries for the following warehouses" msgstr "" @@ -32623,7 +32677,7 @@ msgstr "" msgid "No accounts found." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:794 +#: erpnext/selling/doctype/sales_order/sales_order.py:795 msgid "No active BOM found for item {0}. Delivery by Serial No cannot be ensured" msgstr "" @@ -32635,7 +32689,7 @@ msgstr "" msgid "No additional fields available" msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:103 +#: erpnext/crm/doctype/appointment/appointment.py:104 msgid "No availability of slots are found. Please add on Appointment Booking Settings." msgstr "" @@ -32990,7 +33044,7 @@ msgstr "" msgid "Non Profit" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1635 +#: erpnext/manufacturing/doctype/bom/bom.py:1658 msgid "Non stock items" msgstr "" @@ -33094,7 +33148,7 @@ msgstr "" msgid "Not Started" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:426 +#: erpnext/accounts/report/cash_flow/cash_flow.py:430 msgid "Not able to find the earliest Fiscal Year for the given company." msgstr "" @@ -33148,7 +33202,7 @@ msgstr "" msgid "Note: Email will not be sent to disabled users" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:793 +#: erpnext/manufacturing/doctype/bom/bom.py:821 msgid "Note: If you want to use the finished good {0} as a raw material, then enable the 'Do Not Explode' checkbox in the Items table against the same raw material." msgstr "" @@ -33156,7 +33210,7 @@ msgstr "" msgid "Note: Item {0} added multiple times" msgstr "" -#: erpnext/controllers/accounts_controller.py:736 +#: erpnext/controllers/accounts_controller.py:772 msgid "Note: Payment Entry will not be created since 'Cash or Bank Account' was not specified" msgstr "" @@ -33216,6 +33270,14 @@ msgstr "" msgid "Nothing more to show." msgstr "" +#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:1334 +msgid "Nothing to order from the selected rows" +msgstr "" + +#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:1332 +msgid "Nothing to order, the selected rows are already covered by stock or existing orders" +msgstr "" + #. Label of the notice_number_of_days (Int) field in DocType 'Employee' #: erpnext/setup/doctype/employee/employee.json msgid "Notice (days)" @@ -33592,7 +33654,7 @@ msgstr "" msgid "Only 'Payment Entries' made against this advance account are supported." msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:108 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:120 msgid "Only CSV and Excel files can be used to for importing data. Please check the file format you are trying to upload" msgstr "" @@ -33652,11 +33714,11 @@ msgstr "" msgid "Only one of Deposit or Withdrawal should be non-zero when applying an Excluded Fee." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:330 +#: erpnext/manufacturing/doctype/bom/bom.py:358 msgid "Only one operation can have 'Is Final Finished Good' checked when 'Track Semi Finished Goods' is enabled." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1683 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1757 msgid "Only one {0} entry can be created against the Work Order {1}" msgstr "" @@ -33934,7 +33996,7 @@ msgstr "" msgid "Opening Invoice Tool" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1722 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1762 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2044 msgid "Opening Invoice has rounding adjustment of {0}.

    '{1}' account is required to post these values. Please set it in Company: {2}.

    Or, '{3}' can be enabled to not post any rounding adjustment." msgstr "" @@ -34034,7 +34096,7 @@ msgstr "" msgid "Operating Cost Per BOM Quantity" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1740 +#: erpnext/manufacturing/doctype/bom/bom.py:1763 msgid "Operating Cost as per Work Order / BOM" msgstr "" @@ -34110,7 +34172,7 @@ msgstr "" msgid "Operation Time" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1655 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1648 msgid "Operation Time must be greater than 0 for Operation {0}" msgstr "" @@ -34125,15 +34187,15 @@ msgstr "" msgid "Operation time does not depend on quantity to produce" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:517 +#: erpnext/manufacturing/doctype/job_card/job_card.js:528 msgid "Operation {0} added multiple times in the work order {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1298 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1328 msgid "Operation {0} does not belong to the work order {1}" msgstr "" -#: erpnext/manufacturing/doctype/workstation/workstation.py:444 +#: erpnext/manufacturing/doctype/workstation/workstation.py:443 msgid "Operation {0} longer than any available working hours in workstation {1}, break down the operation into multiple operations" msgstr "" @@ -34147,7 +34209,7 @@ msgstr "" #: erpnext/manufacturing/doctype/bom/bom.json #: erpnext/manufacturing/doctype/work_order/work_order.js:325 #: erpnext/manufacturing/doctype/work_order/work_order.json -#: erpnext/setup/doctype/company/company.py:472 +#: erpnext/setup/doctype/company/company.py:473 #: erpnext/setup/doctype/email_digest/email_digest.json #: erpnext/templates/generators/bom.html:61 msgid "Operations" @@ -34159,7 +34221,7 @@ msgstr "" msgid "Operations Routing" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1228 +#: erpnext/manufacturing/doctype/bom/bom.py:1249 msgid "Operations cannot be left blank" msgstr "" @@ -34320,7 +34382,7 @@ msgstr "" msgid "Optimize Route" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1033 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1042 msgid "Optional. Select a specific manufacture entry to reverse." msgstr "" @@ -34470,7 +34532,7 @@ msgstr "" #: erpnext/buying/doctype/supplier/supplier_dashboard.py:11 #: erpnext/selling/doctype/customer/customer_dashboard.py:20 -#: erpnext/selling/doctype/sales_order/sales_order.py:966 +#: erpnext/selling/doctype/sales_order/sales_order.py:967 #: erpnext/setup/doctype/company/company_dashboard.py:23 msgid "Orders" msgstr "" @@ -34689,10 +34751,10 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/report/accounts_payable/accounts_payable.html:140 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.html:141 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1227 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1259 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:167 #: erpnext/accounts/report/purchase_register/purchase_register.py:305 -#: erpnext/accounts/report/sales_register/sales_register.py:333 +#: erpnext/accounts/report/sales_register/sales_register.py:342 msgid "Outstanding Amount" msgstr "" @@ -34737,7 +34799,7 @@ msgstr "" msgid "Over Billing Allowance (%)" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1367 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1380 msgid "Over Billing Allowance exceeded for Purchase Receipt Item {0} ({1}) by {2}%" msgstr "" @@ -34760,7 +34822,7 @@ msgstr "" msgid "Over Picking Allowance (%)" msgstr "" -#: erpnext/controllers/stock_controller.py:1914 +#: erpnext/controllers/stock_controller.py:1925 msgid "Over Receipt" msgstr "" @@ -34785,7 +34847,7 @@ msgstr "" msgid "Overbilling of {0} {1} ignored for item {2} because you have {3} role." msgstr "" -#: erpnext/controllers/accounts_controller.py:2216 +#: erpnext/controllers/accounts_controller.py:2252 msgid "Overbilling of {} ignored because you have {} role." msgstr "" @@ -35298,7 +35360,7 @@ msgstr "" msgid "Packed Items" msgstr "" -#: erpnext/controllers/stock_controller.py:1748 +#: erpnext/controllers/stock_controller.py:1759 msgid "Packed Items cannot be transferred internally" msgstr "" @@ -35380,7 +35442,7 @@ msgstr "" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:173 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1221 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1253 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:165 #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py:201 #: erpnext/accounts/report/pos_register/pos_register.py:209 @@ -35445,7 +35507,7 @@ msgstr "" msgid "Paid To Account Type" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:344 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:384 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1204 msgid "Paid amount + Write Off Amount can not be greater than Grand Total" msgstr "" @@ -35526,7 +35588,7 @@ msgstr "" msgid "Parent Account" msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:383 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:395 msgid "Parent Account Missing" msgstr "" @@ -35540,7 +35602,7 @@ msgstr "" msgid "Parent Company" msgstr "" -#: erpnext/setup/doctype/company/company.py:607 +#: erpnext/setup/doctype/company/company.py:608 msgid "Parent Company must be a group company" msgstr "" @@ -35625,11 +35687,11 @@ msgstr "" msgid "Parent Task" msgstr "" -#: erpnext/projects/doctype/task/task.py:171 +#: erpnext/projects/doctype/task/task.py:187 msgid "Parent Task {0} is not a Template Task" msgstr "" -#: erpnext/projects/doctype/task/task.py:194 +#: erpnext/projects/doctype/task/task.py:210 msgid "Parent Task {0} must be a Group Task" msgstr "" @@ -35649,7 +35711,7 @@ msgstr "" msgid "Parent Warehouse" msgstr "" -#: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py:191 +#: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py:192 msgid "Parsed file is not in valid MT940 format or contains no transactions." msgstr "" @@ -35892,7 +35954,7 @@ msgstr "" #: erpnext/accounts/report/accounts_payable/accounts_payable.js:105 #: erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js:82 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.js:65 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1154 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1186 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js:82 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:147 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js:49 @@ -35921,7 +35983,7 @@ msgstr "" #. Name of a DocType #: erpnext/accounts/doctype/party_account/party_account.json -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1166 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1198 msgid "Party Account" msgstr "" @@ -35954,7 +36016,7 @@ msgstr "" msgid "Party Account No. (Bank Statement)" msgstr "" -#: erpnext/controllers/accounts_controller.py:2500 +#: erpnext/controllers/accounts_controller.py:2536 msgid "Party Account {0} currency ({1}) and document currency ({2}) should be same" msgstr "" @@ -36106,7 +36168,7 @@ msgstr "" #: erpnext/accounts/report/accounts_payable/accounts_payable.js:92 #: erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js:69 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.js:52 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1148 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1180 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js:69 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:141 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js:42 @@ -36225,7 +36287,7 @@ msgstr "" msgid "Pause" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:662 +#: erpnext/manufacturing/doctype/job_card/job_card.js:672 msgid "Pause Job" msgstr "" @@ -36276,7 +36338,7 @@ msgid "Payable" msgstr "" #: erpnext/accounts/report/accounts_payable/accounts_payable.js:50 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1164 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1196 #: erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py:209 #: erpnext/accounts/report/purchase_register/purchase_register.py:210 #: erpnext/accounts/report/purchase_register/purchase_register.py:251 @@ -36458,7 +36520,7 @@ msgstr "" msgid "Payment Entry is already created" msgstr "" -#: erpnext/controllers/accounts_controller.py:1649 +#: erpnext/controllers/accounts_controller.py:1685 msgid "Payment Entry {0} is linked against Order {1}, check if it should be pulled as advance in this invoice." msgstr "" @@ -36742,7 +36804,7 @@ msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/buying/doctype/purchase_order/purchase_order.json -#: erpnext/controllers/accounts_controller.py:2782 +#: erpnext/controllers/accounts_controller.py:2818 #: erpnext/selling/doctype/quotation/quotation.json #: erpnext/selling/doctype/sales_order/sales_order.json msgid "Payment Schedule" @@ -36752,7 +36814,7 @@ msgstr "" msgid "Payment Schedule based Payment Requests cannot be created because a Payment Entry already exists for this document." msgstr "" -#: erpnext/public/js/controllers/transaction.js:534 +#: erpnext/public/js/controllers/transaction.js:537 msgid "Payment Schedules" msgstr "" @@ -36771,10 +36833,10 @@ msgstr "" #: erpnext/accounts/doctype/payment_schedule/payment_schedule.json #: erpnext/accounts/doctype/payment_term/payment_term.json #: erpnext/accounts/doctype/payment_terms_template_detail/payment_terms_template_detail.json -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1217 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1249 #: erpnext/accounts/report/gross_profit/gross_profit.py:451 #: erpnext/accounts/workspace/invoicing/invoicing.json -#: erpnext/public/js/controllers/transaction.js:549 +#: erpnext/public/js/controllers/transaction.js:552 #: erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py:30 #: erpnext/workspace_sidebar/accounts_setup.json msgid "Payment Term" @@ -37037,11 +37099,12 @@ msgstr "" #: erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.py:55 #: erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.py:45 -#: erpnext/manufacturing/doctype/job_card/job_card.js:272 +#: erpnext/manufacturing/doctype/job_card/job_card.js:294 msgid "Pending Quantity" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:70 +#: erpnext/manufacturing/doctype/job_card/job_card.js:72 +#: erpnext/manufacturing/doctype/job_card/job_card.js:311 msgid "Pending Quantity cannot be greater than {0}" msgstr "" @@ -37077,11 +37140,11 @@ msgstr "" msgid "Pending processing" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1534 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1663 msgid "Pending quantity cannot be greater than the for quantity." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1528 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1657 msgid "Pending quantity cannot be negative." msgstr "" @@ -37530,7 +37593,7 @@ msgstr "" msgid "Pickup Date" msgstr "" -#: erpnext/stock/doctype/shipment/shipment.js:398 +#: erpnext/stock/doctype/shipment/shipment.js:401 msgid "Pickup Date cannot be before this day" msgstr "" @@ -37681,7 +37744,7 @@ msgstr "" msgid "Planned End Date" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:300 +#: erpnext/manufacturing/doctype/work_order/work_order.py:307 msgid "Planned End Date cannot be before Planned Start Date" msgstr "" @@ -37831,11 +37894,11 @@ msgstr "" msgid "Please add Operations first." msgstr "" -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:214 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:220 msgid "Please add Request for Quotation to the sidebar in Portal Settings." msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:420 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:432 msgid "Please add Root Account for - {0}" msgstr "" @@ -37843,7 +37906,7 @@ msgstr "" msgid "Please add a Temporary Opening account in Chart of Accounts" msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:95 +#: erpnext/crm/doctype/appointment/appointment.py:96 msgid "Please add a valid Holiday List on Appointment Booking Settings." msgstr "" @@ -37851,7 +37914,7 @@ msgstr "" msgid "Please add an account for the Bank Entry rule." msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:662 +#: erpnext/public/js/utils/serial_no_batch_selector.js:672 msgid "Please add atleast one Serial No / Batch No" msgstr "" @@ -37875,7 +37938,7 @@ msgstr "" msgid "Please add {1} role to user {0}." msgstr "" -#: erpnext/controllers/stock_controller.py:1925 +#: erpnext/controllers/stock_controller.py:1936 msgid "Please adjust the qty or edit {0} to proceed." msgstr "" @@ -37929,7 +37992,7 @@ msgstr "" msgid "Please check your email to confirm the appointment" msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:184 +#: erpnext/crm/doctype/appointment/appointment.py:185 msgid "Please check your email to confirm the appointment." msgstr "" @@ -37981,7 +38044,7 @@ msgstr "" msgid "Please create a new Accounting Dimension if required." msgstr "" -#: erpnext/controllers/accounts_controller.py:837 +#: erpnext/controllers/accounts_controller.py:873 msgid "Please create purchase from internal sale or delivery document itself" msgstr "" @@ -38029,11 +38092,11 @@ msgstr "" msgid "Please enable {} in {} to allow same item in multiple rows" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:391 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:431 msgid "Please ensure that the {0} account is a Balance Sheet account. You can change the parent account to a Balance Sheet account or select a different account." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:399 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:439 msgid "Please ensure that the {0} account {1} is a Payable account. You can change the account type to Payable or select a different account." msgstr "" @@ -38045,7 +38108,7 @@ msgstr "" msgid "Please ensure {} account {} is a Receivable account." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:883 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:888 msgid "Please enter Difference Account or set default Stock Adjustment Account for company {0}" msgstr "" @@ -38066,7 +38129,7 @@ msgstr "" msgid "Please enter Cost Center" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:423 +#: erpnext/selling/doctype/sales_order/sales_order.py:424 msgid "Please enter Delivery Date" msgstr "" @@ -38083,7 +38146,7 @@ msgstr "" msgid "Please enter Item Code to get Batch Number" msgstr "" -#: erpnext/public/js/controllers/transaction.js:3048 +#: erpnext/public/js/controllers/transaction.js:3052 msgid "Please enter Item Code to get batch no" msgstr "" @@ -38115,7 +38178,7 @@ msgstr "" msgid "Please enter Reference date" msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:399 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:411 msgid "Please enter Root Type for account- {0}" msgstr "" @@ -38123,7 +38186,7 @@ msgstr "" msgid "Please enter Serial No" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:319 +#: erpnext/public/js/utils/serial_no_batch_selector.js:329 msgid "Please enter Serial Nos" msgstr "" @@ -38135,16 +38198,16 @@ msgstr "" msgid "Please enter Warehouse and Date" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:670 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:710 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1335 msgid "Please enter Write Off Account" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:680 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:720 msgid "Please enter a valid Write Off Account" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:691 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:731 msgid "Please enter a valid Write Off Cost Center" msgstr "" @@ -38164,7 +38227,7 @@ msgstr "" msgid "Please enter company name first" msgstr "" -#: erpnext/controllers/accounts_controller.py:3001 +#: erpnext/controllers/accounts_controller.py:3037 msgid "Please enter default currency in Company Master" msgstr "" @@ -38204,7 +38267,7 @@ msgstr "" msgid "Please enter the phone number first" msgstr "" -#: erpnext/controllers/buying_controller.py:1267 +#: erpnext/controllers/buying_controller.py:1275 msgid "Please enter the {schedule_date}." msgstr "" @@ -38232,7 +38295,7 @@ msgstr "" msgid "Please fill up the Availability of Slots table to enable Appointment Scheduling." msgstr "" -#: erpnext/stock/doctype/shipment/shipment.js:277 +#: erpnext/stock/doctype/shipment/shipment.js:280 msgid "Please first set Full Name, Email and Phone for the user" msgstr "" @@ -38260,7 +38323,7 @@ msgstr "" msgid "Please make sure the employees above report to another Active employee." msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:378 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:390 msgid "Please make sure the file you are using has 'Parent Account' column present in the header." msgstr "" @@ -38268,7 +38331,7 @@ msgstr "" msgid "Please make sure you really want to delete all the transactions for {0}. Your master data will remain as it is. This action cannot be undone." msgstr "" -#: erpnext/stock/doctype/item/item.js:741 +#: erpnext/stock/doctype/item/item.js:750 msgid "Please mention 'Weight UOM' along with Weight." msgstr "" @@ -38289,7 +38352,7 @@ msgstr "" msgid "Please pull items from Delivery Note" msgstr "" -#: erpnext/stock/doctype/shipment/shipment.js:444 +#: erpnext/stock/doctype/shipment/shipment.js:447 msgid "Please rectify and try again." msgstr "" @@ -38322,12 +38385,12 @@ msgstr "" msgid "Please select Template Type to download template" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:867 -#: erpnext/public/js/controllers/taxes_and_totals.js:840 +#: erpnext/controllers/taxes_and_totals.py:906 +#: erpnext/public/js/controllers/taxes_and_totals.js:864 msgid "Please select Apply Discount On" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1768 +#: erpnext/selling/doctype/sales_order/sales_order.py:1800 msgid "Please select BOM against item {0}" msgstr "" @@ -38377,7 +38440,7 @@ msgstr "" msgid "Please select Customer first" msgstr "" -#: erpnext/setup/doctype/company/company.py:538 +#: erpnext/setup/doctype/company/company.py:539 msgid "Please select Existing Company for creating Chart of Accounts" msgstr "" @@ -38415,11 +38478,11 @@ msgstr "" msgid "Please select Posting Date first" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1292 +#: erpnext/manufacturing/doctype/bom/bom.py:1315 msgid "Please select Price List" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1770 +#: erpnext/selling/doctype/sales_order/sales_order.py:1802 msgid "Please select Qty against item {0}" msgstr "" @@ -38439,15 +38502,15 @@ msgstr "" msgid "Please select Stock Asset Account" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2036 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2110 msgid "Please select Subcontracting Order instead of Purchase Order {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:2857 +#: erpnext/controllers/accounts_controller.py:2893 msgid "Please select Unrealized Profit / Loss account or add default Unrealized Profit / Loss account account for company {0}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1547 +#: erpnext/manufacturing/doctype/bom/bom.py:1570 msgid "Please select a BOM" msgstr "" @@ -38457,10 +38520,10 @@ msgid "Please select a Company" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:268 -#: erpnext/manufacturing/doctype/bom/bom.js:734 +#: erpnext/manufacturing/doctype/bom/bom.js:736 #: erpnext/manufacturing/doctype/bom/bom.py:279 #: erpnext/public/js/controllers/accounts.js:274 -#: erpnext/public/js/controllers/transaction.js:3347 +#: erpnext/public/js/controllers/transaction.js:3351 msgid "Please select a Company first." msgstr "" @@ -38484,11 +38547,11 @@ msgstr "" msgid "Please select a Supplier" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:666 +#: erpnext/public/js/utils/serial_no_batch_selector.js:676 msgid "Please select a Warehouse" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1686 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1841 msgid "Please select a Work Order first." msgstr "" @@ -38553,7 +38616,7 @@ msgstr "" msgid "Please select a valid Purchase Order that is configured for Subcontracting." msgstr "" -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1355 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1387 msgid "Please select a valid {0}" msgstr "" @@ -38565,7 +38628,7 @@ msgstr "" msgid "Please select a warehouse first." msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.js:203 +#: erpnext/assets/doctype/asset_repair/asset_repair.js:218 msgid "Please select an item code before setting the warehouse." msgstr "" @@ -38589,7 +38652,7 @@ msgstr "" msgid "Please select at least one row with difference value" msgstr "" -#: erpnext/public/js/controllers/transaction.js:586 +#: erpnext/public/js/controllers/transaction.js:589 msgid "Please select at least one schedule." msgstr "" @@ -38655,7 +38718,7 @@ msgstr "" msgid "Please select the Multiple Tier Program type for more than one collection rules." msgstr "" -#: erpnext/stock/doctype/item/item.js:360 +#: erpnext/stock/doctype/item/item.js:369 msgid "Please select the Warehouse first" msgstr "" @@ -38689,7 +38752,7 @@ msgstr "" msgid "Please select {0} first" msgstr "" -#: erpnext/public/js/controllers/transaction.js:152 +#: erpnext/public/js/controllers/transaction.js:155 msgid "Please set 'Apply Additional Discount On'" msgstr "" @@ -38713,7 +38776,7 @@ msgstr "" msgid "Please set Account for Change Amount" msgstr "" -#: erpnext/stock/__init__.py:91 +#: erpnext/stock/__init__.py:94 msgid "Please set Account in Warehouse {0} or Default Inventory Account in Company {1}" msgstr "" @@ -38761,7 +38824,7 @@ msgstr "" msgid "Please set Fixed Asset Account in Asset Category {0}" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:600 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:640 msgid "Please set Fixed Asset Account in {} against {}." msgstr "" @@ -38807,7 +38870,7 @@ msgstr "" msgid "Please set a default Holiday List for Employee {0} or Company {1}" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1156 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1196 msgid "Please set account in Warehouse {0}" msgstr "" @@ -38820,7 +38883,7 @@ msgstr "" msgid "Please set an Address on the Company '%s'" msgstr "" -#: erpnext/controllers/stock_controller.py:1056 +#: erpnext/controllers/stock_controller.py:1067 msgid "Please set an Expense Account in the Items table" msgstr "" @@ -38856,7 +38919,7 @@ msgstr "" msgid "Please set default Exchange Gain/Loss Account in Company {}" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:389 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:397 msgid "Please set default Expense Account in Company {0}" msgstr "" @@ -38864,11 +38927,11 @@ msgstr "" msgid "Please set default UOM in Stock Settings" msgstr "" -#: erpnext/controllers/stock_controller.py:835 +#: erpnext/controllers/stock_controller.py:846 msgid "Please set default cost of goods sold account in company {0} for booking rounding gain and loss during stock transfer" msgstr "" -#: erpnext/controllers/stock_controller.py:286 +#: erpnext/controllers/stock_controller.py:290 msgid "Please set default inventory account for item {0}, or their item group or brand." msgstr "" @@ -38881,7 +38944,7 @@ msgstr "" msgid "Please set filter based on Item or Warehouse" msgstr "" -#: erpnext/controllers/accounts_controller.py:2416 +#: erpnext/controllers/accounts_controller.py:2452 msgid "Please set one of the following:" msgstr "" @@ -38889,7 +38952,7 @@ msgstr "" msgid "Please set opening number of booked depreciations" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2712 +#: erpnext/public/js/controllers/transaction.js:2716 msgid "Please set recurring after saving" msgstr "" @@ -38905,11 +38968,11 @@ msgstr "" msgid "Please set the Item Code first" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1749 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1904 msgid "Please set the Target Warehouse in the Job Card" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1753 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1908 msgid "Please set the WIP Warehouse in the Job Card" msgstr "" @@ -38921,14 +38984,14 @@ msgstr "" msgid "Please set up the Campaign Schedule in the Campaign {0}" msgstr "" -#: erpnext/public/js/queries.js:67 +#: erpnext/public/js/queries.js:71 #: erpnext/stock/report/reserved_stock/reserved_stock.py:26 msgid "Please set {0}" msgstr "" -#: erpnext/public/js/queries.js:34 erpnext/public/js/queries.js:49 -#: erpnext/public/js/queries.js:82 erpnext/public/js/queries.js:103 -#: erpnext/public/js/queries.js:134 +#: erpnext/public/js/queries.js:38 erpnext/public/js/queries.js:53 +#: erpnext/public/js/queries.js:86 erpnext/public/js/queries.js:107 +#: erpnext/public/js/queries.js:138 msgid "Please set {0} first." msgstr "" @@ -38945,7 +39008,7 @@ msgid "Please set {0} in BOM Creator {1}" msgstr "" #: erpnext/controllers/buying_controller.py:345 -#: erpnext/controllers/stock_controller.py:926 +#: erpnext/controllers/stock_controller.py:937 msgid "Please set {0} in Company {1} or in the Item Defaults of Item {2}" msgstr "" @@ -38953,7 +39016,7 @@ msgstr "" msgid "Please set {0} in Company {1} to account for Exchange Gain / Loss" msgstr "" -#: erpnext/controllers/accounts_controller.py:618 +#: erpnext/controllers/accounts_controller.py:637 msgid "Please set {0} to {1}, the same account that was used in the original invoice {2}." msgstr "" @@ -38965,7 +39028,7 @@ msgstr "" msgid "Please share this email with your support team so that they can find and fix the issue." msgstr "" -#: erpnext/stock/get_item_details.py:333 +#: erpnext/stock/get_item_details.py:418 msgid "Please specify Company" msgstr "" @@ -38975,12 +39038,12 @@ msgstr "" msgid "Please specify Company to proceed" msgstr "" -#: erpnext/controllers/accounts_controller.py:3232 +#: erpnext/controllers/accounts_controller.py:3268 #: erpnext/public/js/controllers/accounts.js:114 msgid "Please specify a valid Row ID for row {0} in table {1}" msgstr "" -#: erpnext/public/js/queries.js:148 +#: erpnext/public/js/queries.js:152 msgid "Please specify a {0} first." msgstr "" @@ -39004,7 +39067,7 @@ msgstr "" msgid "Please uncheck 'Show in Bucket View' to create Orders" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:240 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:241 msgid "Please update Repair Status." msgstr "" @@ -39174,7 +39237,7 @@ msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1146 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1178 #: erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py:38 #: erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.html:7 #: erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py:65 @@ -39188,7 +39251,7 @@ msgstr "" #: erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py:94 #: erpnext/accounts/report/pos_register/pos_register.py:172 #: erpnext/accounts/report/purchase_register/purchase_register.py:185 -#: erpnext/accounts/report/sales_register/sales_register.py:199 +#: erpnext/accounts/report/sales_register/sales_register.py:208 #: erpnext/assets/doctype/asset_capitalization/asset_capitalization.json #: erpnext/manufacturing/doctype/job_card/job_card.json #: erpnext/manufacturing/doctype/master_production_schedule/master_production_schedule.json @@ -39221,7 +39284,7 @@ msgstr "" msgid "Posting Date" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:269 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:270 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:143 msgid "Posting Date cannot be future date" msgstr "" @@ -39232,7 +39295,7 @@ msgstr "" msgid "Posting Date inheritance for exchange gain / loss" msgstr "" -#: erpnext/public/js/controllers/transaction.js:1139 +#: erpnext/public/js/controllers/transaction.js:1143 msgid "Posting Date will change to today's date as Edit Posting Date and Time is unchecked. Are you sure want to proceed?" msgstr "" @@ -39295,7 +39358,7 @@ msgstr "" msgid "Posting Time" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2923 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2997 msgid "Posting date and posting time is mandatory" msgstr "" @@ -39438,6 +39501,12 @@ msgstr "" msgid "Prevent RFQs" msgstr "" +#. Label of the enable_overdue_billing_threshold (Check) field in DocType +#. 'Accounts Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Prevent Sales Invoice when Customer is Overdue" +msgstr "" + #. Option for the 'Corrective/Preventive' (Select) field in DocType 'Quality #. Action' #: erpnext/quality_management/doctype/quality_action/quality_action.json @@ -39510,12 +39579,12 @@ msgstr "" #. Option for the 'Price or Product Discount' (Select) field in DocType #. 'Pricing Rule' #: erpnext/accounts/doctype/pricing_rule/pricing_rule.json -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:230 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:237 #: erpnext/selling/page/point_of_sale/pos_item_selector.js:116 msgid "Price" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:244 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:251 msgid "Price ({0})" msgstr "" @@ -39622,7 +39691,7 @@ msgstr "" msgid "Price List Currency" msgstr "" -#: erpnext/stock/get_item_details.py:1345 +#: erpnext/stock/get_item_details.py:1430 msgid "Price List Currency not selected" msgstr "" @@ -39739,7 +39808,7 @@ msgstr "" msgid "Price Not UOM Dependent" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:251 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:258 msgid "Price Per Unit ({0})" msgstr "" @@ -39747,7 +39816,7 @@ msgstr "" msgid "Price is not set for the item." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:605 +#: erpnext/manufacturing/doctype/bom/bom.py:633 msgid "Price not found for item {0} in price list {1}" msgstr "" @@ -39761,7 +39830,7 @@ msgstr "" msgid "Price or product discount slabs are required" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:237 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:244 msgid "Price per Unit (Stock UOM)" msgstr "" @@ -39916,6 +39985,13 @@ msgstr "" msgid "Pricing Rules are further filtered based on quantity." msgstr "" +#. Label of the supplier_primary_address (Link) field in DocType 'Supplier' +#. Label of the primary_address (Text Editor) field in DocType 'Customer' +#: erpnext/buying/doctype/supplier/supplier.json +#: erpnext/selling/doctype/customer/customer.json +msgid "Primary Address" +msgstr "" + #: erpnext/public/js/utils/contact_address_quick_entry.js:73 msgid "Primary Address Details" msgstr "" @@ -39934,6 +40010,14 @@ msgstr "" msgid "Primary Address and Contact" msgstr "" +#. Label of the supplier_primary_contact (Link) field in DocType 'Supplier' +#. Label of the primary_contact_section (Section Break) field in DocType +#. 'Opportunity' +#: erpnext/buying/doctype/supplier/supplier.json +#: erpnext/crm/doctype/opportunity/opportunity.json +msgid "Primary Contact" +msgstr "" + #: erpnext/public/js/utils/contact_address_quick_entry.js:41 msgid "Primary Contact Details" msgstr "" @@ -40136,7 +40220,7 @@ msgstr "" msgid "Process Loss %" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1272 +#: erpnext/manufacturing/doctype/bom/bom.py:1293 msgid "Process Loss Percentage cannot be greater than 100" msgstr "" @@ -40154,6 +40238,7 @@ msgstr "" #: erpnext/manufacturing/doctype/bom/bom.json #: erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.json #: erpnext/manufacturing/doctype/job_card/job_card.json +#: erpnext/manufacturing/doctype/work_order/work_order.js:1117 #: erpnext/manufacturing/doctype/work_order/work_order.json #: erpnext/manufacturing/doctype/work_order_operation/work_order_operation.json #: erpnext/manufacturing/report/process_loss_report/process_loss_report.py:94 @@ -40163,10 +40248,14 @@ msgstr "" msgid "Process Loss Qty" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:288 +#: erpnext/manufacturing/doctype/job_card/job_card.js:325 msgid "Process Loss Quantity" msgstr "" +#: erpnext/manufacturing/doctype/job_card/job_card.js:341 +msgid "Process Loss Quantity cannot be greater than {0}" +msgstr "" + #. Name of a report #: erpnext/manufacturing/report/process_loss_report/process_loss_report.json msgid "Process Loss Report" @@ -40244,7 +40333,11 @@ msgstr "" msgid "Process in Single Transaction" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1531 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1121 +msgid "Process loss booked against the operations of this work order." +msgstr "" + +#: erpnext/manufacturing/doctype/job_card/job_card.py:1660 msgid "Process loss quantity cannot be negative." msgstr "" @@ -40417,7 +40510,7 @@ msgstr "" #. Label of a Card Break in the Manufacturing Workspace #: erpnext/manufacturing/doctype/workstation/workstation.json #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json -#: erpnext/setup/doctype/company/company.py:478 +#: erpnext/setup/doctype/company/company.py:479 msgid "Production" msgstr "" @@ -40626,7 +40719,7 @@ msgstr "" msgid "Profitability Analysis" msgstr "" -#: erpnext/projects/doctype/task/task.py:157 +#: erpnext/projects/doctype/task/task.py:173 #, python-format msgid "Progress % for a task cannot be more than 100." msgstr "" @@ -40972,7 +41065,7 @@ msgstr "" msgid "Providing" msgstr "" -#: erpnext/setup/doctype/company/company.py:577 +#: erpnext/setup/doctype/company/company.py:578 msgid "Provisional Account" msgstr "" @@ -41044,7 +41137,7 @@ msgstr "" #: erpnext/accounts/doctype/tax_rule/tax_rule.json #: erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json #: erpnext/projects/doctype/project/project_dashboard.py:16 -#: erpnext/setup/doctype/company/company.py:466 erpnext/setup/install.py:428 +#: erpnext/setup/doctype/company/company.py:467 erpnext/setup/install.py:428 #: erpnext/stock/doctype/item/item.json #: erpnext/stock/doctype/item/item_list.js:30 #: erpnext/stock/doctype/item_lead_time/item_lead_time.json @@ -41204,7 +41297,7 @@ msgstr "" msgid "Purchase Invoice Trends" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:331 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:371 msgid "Purchase Invoice can be held after submitting." msgstr "" @@ -41212,11 +41305,11 @@ msgstr "" msgid "Purchase Invoice cannot be made against an existing asset {0}" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1943 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1981 msgid "Purchase Invoice without any outstanding amount cannot be held." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:2033 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:2071 msgid "Purchase Invoices" msgstr "" @@ -41257,7 +41350,7 @@ msgstr "" #: erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js:48 #: erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.py:203 #: erpnext/buying/workspace/buying/buying.json -#: erpnext/controllers/buying_controller.py:1000 +#: erpnext/controllers/buying_controller.py:1008 #: erpnext/crm/doctype/contract/contract.json #: erpnext/manufacturing/doctype/blanket_order/blanket_order.js:54 #: erpnext/manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json @@ -41345,11 +41438,11 @@ msgstr "" msgid "Purchase Order Pricing Rule" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:640 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:680 msgid "Purchase Order Required" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:635 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:675 msgid "Purchase Order Required for item {}" msgstr "" @@ -41367,15 +41460,15 @@ msgstr "" msgid "Purchase Order already created for all Sales Order items" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:338 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:339 msgid "Purchase Order number required for Item {0}" msgstr "" -#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:1363 +#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:1384 msgid "Purchase Order {0} created" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:700 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:740 msgid "Purchase Order {0} is not submitted" msgstr "" @@ -41409,7 +41502,7 @@ msgstr "" msgid "Purchase Orders to Receive" msgstr "" -#: erpnext/controllers/accounts_controller.py:2048 +#: erpnext/controllers/accounts_controller.py:2084 msgid "Purchase Orders {0} are un-linked" msgstr "" @@ -41495,11 +41588,11 @@ msgstr "" msgid "Purchase Receipt No" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:662 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:702 msgid "Purchase Receipt Required" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:657 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:697 msgid "Purchase Receipt Required for item {}" msgstr "" @@ -41527,7 +41620,7 @@ msgstr "" msgid "Purchase Receipt {0} created." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:707 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:747 msgid "Purchase Receipt {0} is not submitted" msgstr "" @@ -41653,7 +41746,7 @@ msgstr "" msgid "Purpose" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:700 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:705 msgid "Purpose must be one of {0}" msgstr "" @@ -41741,7 +41834,7 @@ msgstr "" #: erpnext/controllers/trends.py:294 erpnext/controllers/trends.py:306 #: erpnext/controllers/trends.py:311 #: erpnext/crm/doctype/opportunity_item/opportunity_item.json -#: erpnext/manufacturing/doctype/bom/bom.js:1112 +#: erpnext/manufacturing/doctype/bom/bom.js:1114 #: erpnext/manufacturing/doctype/bom_creator_item/bom_creator_item.json #: erpnext/manufacturing/doctype/bom_item/bom_item.json #: erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.json @@ -41752,7 +41845,7 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order_additional_item/work_order_additional_item.json #: erpnext/manufacturing/doctype/work_order_item/work_order_item.json #: erpnext/manufacturing/doctype/workstation/workstation_job_card.html:28 -#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:69 +#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:75 #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:243 #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:341 #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:406 @@ -41872,18 +41965,18 @@ msgstr "" #. Label of the for_quantity (Float) field in DocType 'Job Card' #. Label of the qty (Float) field in DocType 'Work Order' -#: erpnext/manufacturing/doctype/bom/bom.js:408 +#: erpnext/manufacturing/doctype/bom/bom.js:410 #: erpnext/manufacturing/doctype/job_card/job_card.json #: erpnext/manufacturing/doctype/work_order/work_order.json #: erpnext/manufacturing/report/process_loss_report/process_loss_report.py:82 msgid "Qty To Manufacture" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1589 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1582 msgid "Qty To Manufacture ({0}) cannot be a fraction for the UOM {2}. To allow this, disable '{1}' in the UOM {2}." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:261 +#: erpnext/manufacturing/doctype/job_card/job_card.py:265 msgid "Qty To Manufacture in the job card cannot be greater than Qty To Manufacture in the work order for the operation {0}.

    Solution: Either you can reduce the Qty To Manufacture in the job card or set the 'Overproduction Percentage For Work Order' in the {1}." msgstr "" @@ -41934,8 +42027,8 @@ msgstr "" msgid "Qty for which recursion isn't applicable." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1061 -#: erpnext/manufacturing/doctype/work_order/work_order.js:1084 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1070 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1098 msgid "Qty for {0}" msgstr "" @@ -41947,6 +42040,10 @@ msgstr "" msgid "Qty in Stock UOM" msgstr "" +#: erpnext/manufacturing/doctype/job_card/job_card.js:297 +msgid "Qty left for a later cycle or for another job card." +msgstr "" + #. Label of the for_qty (Float) field in DocType 'Pick List' #: erpnext/stock/doctype/pick_list/pick_list.js:206 #: erpnext/stock/doctype/pick_list/pick_list.json @@ -41963,6 +42060,10 @@ msgstr "" msgid "Qty of raw materials will be decided based on the qty of the Finished Goods Item" msgstr "" +#: erpnext/manufacturing/doctype/job_card/job_card.js:327 +msgid "Qty scrapped in this cycle, nobody will produce it." +msgstr "" + #. Label of the consumed_qty (Float) field in DocType 'Purchase Receipt Item #. Supplied' #: erpnext/buying/doctype/purchase_receipt_item_supplied/purchase_receipt_item_supplied.json @@ -41986,13 +42087,12 @@ msgstr "" msgid "Qty to Disassemble" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:384 +#: erpnext/public/js/utils/serial_no_batch_selector.js:394 msgid "Qty to Fetch" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:246 -#: erpnext/manufacturing/doctype/job_card/job_card.py:906 -msgid "Qty to Manufacture" +#: erpnext/manufacturing/doctype/job_card/job_card.js:251 +msgid "Qty to Manufacture in this Cycle" msgstr "" #. Label of the qty (Float) field in DocType 'Production Plan Sub Assembly @@ -42160,7 +42260,7 @@ msgstr "" msgid "Quality Inspection Analysis" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2969 +#: erpnext/public/js/controllers/transaction.js:2973 msgid "Quality Inspection Not Configured" msgstr "" @@ -42225,21 +42325,21 @@ msgstr "" msgid "Quality Inspection Template Name" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:800 +#: erpnext/manufacturing/doctype/job_card/job_card.py:804 msgid "Quality Inspection is required for the item {0} before completing the job card {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:811 -#: erpnext/manufacturing/doctype/job_card/job_card.py:820 +#: erpnext/manufacturing/doctype/job_card/job_card.py:815 +#: erpnext/manufacturing/doctype/job_card/job_card.py:824 msgid "Quality Inspection {0} is not submitted for the item: {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:830 -#: erpnext/manufacturing/doctype/job_card/job_card.py:839 +#: erpnext/manufacturing/doctype/job_card/job_card.py:834 +#: erpnext/manufacturing/doctype/job_card/job_card.py:843 msgid "Quality Inspection {0} is rejected for the item: {1}" msgstr "" -#: erpnext/public/js/controllers/transaction.js:433 +#: erpnext/public/js/controllers/transaction.js:436 #: erpnext/stock/doctype/stock_entry/stock_entry.js:212 msgid "Quality Inspection(s)" msgstr "" @@ -42249,7 +42349,7 @@ msgstr "" msgid "Quality Inspections" msgstr "" -#: erpnext/setup/doctype/company/company.py:508 +#: erpnext/setup/doctype/company/company.py:509 msgid "Quality Management" msgstr "" @@ -42373,9 +42473,9 @@ msgstr "" #: erpnext/buying/report/item_wise_purchase_history/item_wise_purchase_history.py:54 #: erpnext/buying/report/procurement_tracker/procurement_tracker.py:66 #: erpnext/buying/report/purchase_analytics/purchase_analytics.js:28 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:213 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:220 #: erpnext/manufacturing/doctype/blanket_order_item/blanket_order_item.json -#: erpnext/manufacturing/doctype/bom/bom.js:496 +#: erpnext/manufacturing/doctype/bom/bom.js:498 #: erpnext/manufacturing/doctype/bom_creator/bom_creator.js:76 #: erpnext/manufacturing/doctype/bom_creator/bom_creator.json #: erpnext/manufacturing/doctype/plant_floor/plant_floor.js:194 @@ -42383,7 +42483,7 @@ msgstr "" #: erpnext/manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json #: erpnext/public/js/controllers/buying.js:620 #: erpnext/public/js/stock_analytics.js:50 -#: erpnext/public/js/utils/serial_no_batch_selector.js:499 +#: erpnext/public/js/utils/serial_no_batch_selector.js:509 #: erpnext/selling/doctype/quotation_item/quotation_item.json #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/selling/page/point_of_sale/pos_item_cart.js:51 @@ -42536,18 +42636,17 @@ msgstr "" msgid "Quantity must be less than or equal to {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1114 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1141 #: erpnext/stock/doctype/pick_list/pick_list.js:214 msgid "Quantity must not be more than {0}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:773 +#: erpnext/manufacturing/doctype/bom/bom.py:801 msgid "Quantity required for Item {0} in row {1}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:717 -#: erpnext/manufacturing/doctype/job_card/job_card.js:341 -#: erpnext/manufacturing/doctype/job_card/job_card.js:409 +#: erpnext/manufacturing/doctype/bom/bom.py:745 +#: erpnext/manufacturing/doctype/job_card/job_card.js:393 #: erpnext/manufacturing/doctype/workstation/workstation.js:303 msgid "Quantity should be greater than 0" msgstr "" @@ -42556,11 +42655,11 @@ msgstr "" msgid "Quantity to Manufacture" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2915 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2908 msgid "Quantity to Manufacture can not be zero for the operation {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1581 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1574 msgid "Quantity to Manufacture must be greater than 0." msgstr "" @@ -42593,7 +42692,7 @@ msgstr "" msgid "Query Route String" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:199 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:200 msgid "Queue Size should be between 5 and 100" msgstr "" @@ -42702,11 +42801,11 @@ msgstr "" msgid "Quotation Trends" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:487 +#: erpnext/selling/doctype/sales_order/sales_order.py:488 msgid "Quotation {0} is cancelled" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:400 +#: erpnext/selling/doctype/sales_order/sales_order.py:401 msgid "Quotation {0} not of type {1}" msgstr "" @@ -42739,7 +42838,7 @@ msgstr "" msgid "RFQ and Purchase Order Settings" msgstr "" -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:133 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:139 msgid "RFQs are not allowed for {0} due to a scorecard standing of {1}" msgstr "" @@ -43018,7 +43117,7 @@ msgstr "" msgid "Rate at which this tax is applied" msgstr "" -#: erpnext/controllers/accounts_controller.py:4162 +#: erpnext/controllers/accounts_controller.py:4198 msgid "Rate of '{}' items cannot be changed" msgstr "" @@ -43157,8 +43256,8 @@ msgstr "" #. Label of the section_break_8 (Section Break) field in DocType 'Job Card' #. Label of the mr_items (Table) field in DocType 'Production Plan' -#: erpnext/manufacturing/doctype/bom/bom.js:449 -#: erpnext/manufacturing/doctype/bom/bom.js:1085 +#: erpnext/manufacturing/doctype/bom/bom.js:451 +#: erpnext/manufacturing/doctype/bom/bom.js:1087 #: erpnext/manufacturing/doctype/job_card/job_card.json #: erpnext/manufacturing/doctype/production_plan/production_plan.json #: erpnext/manufacturing/doctype/workstation/workstation.js:462 @@ -43187,7 +43286,7 @@ msgstr "" msgid "Raw Materials Consumption" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:440 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:445 msgid "Raw Materials Missing" msgstr "" @@ -43221,7 +43320,7 @@ msgstr "" msgid "Raw Materials Supplied Cost" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:765 +#: erpnext/manufacturing/doctype/bom/bom.py:793 msgid "Raw Materials cannot be blank." msgstr "" @@ -43432,10 +43531,10 @@ msgid "Receivable / Payable Account" msgstr "" #: erpnext/accounts/report/accounts_receivable/accounts_receivable.js:79 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1162 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1194 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:241 -#: erpnext/accounts/report/sales_register/sales_register.py:231 -#: erpnext/accounts/report/sales_register/sales_register.py:285 +#: erpnext/accounts/report/sales_register/sales_register.py:240 +#: erpnext/accounts/report/sales_register/sales_register.py:294 msgid "Receivable Account" msgstr "" @@ -43893,7 +43992,7 @@ msgstr "" msgid "Reference #{0} dated {1}" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2825 +#: erpnext/public/js/controllers/transaction.js:2829 msgid "Reference Date for Early Payment Discount" msgstr "" @@ -44151,7 +44250,7 @@ msgstr "" msgid "Rejected Warehouse" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:670 +#: erpnext/public/js/utils/serial_no_batch_selector.js:680 msgid "Rejected Warehouse and Accepted Warehouse cannot be same." msgstr "" @@ -44181,7 +44280,7 @@ msgstr "" msgid "Release Date" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:335 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:375 msgid "Release date must be in the future" msgstr "" @@ -44199,7 +44298,7 @@ msgid "Remaining Amount" msgstr "" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:189 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1239 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1271 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:178 msgid "Remaining Balance" msgstr "" @@ -44257,12 +44356,12 @@ msgstr "" #: erpnext/accounts/print_format/payment_receipt_voucher/payment_receipt_voucher.html:11 #: erpnext/accounts/report/accounts_payable/accounts_payable.html:135 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.html:136 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1271 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1303 #: erpnext/accounts/report/general_ledger/general_ledger.html:163 #: erpnext/accounts/report/general_ledger/general_ledger.py:818 #: erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py:112 #: erpnext/accounts/report/purchase_register/purchase_register.py:312 -#: erpnext/accounts/report/sales_register/sales_register.py:349 +#: erpnext/accounts/report/sales_register/sales_register.py:358 #: erpnext/manufacturing/doctype/bom_creator/bom_creator.json #: erpnext/manufacturing/doctype/downtime_entry/downtime_entry.json #: erpnext/manufacturing/doctype/job_card/job_card.json @@ -44275,12 +44374,6 @@ msgstr "" msgid "Remarks" msgstr "" -#. Label of the remarks_section (Section Break) field in DocType 'Accounts -#. Settings' -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json -msgid "Remarks Column Length" -msgstr "" - #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:71 #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:92 msgid "Remarks:" @@ -44738,12 +44831,12 @@ msgstr "" #: erpnext/buying/doctype/buying_settings/buying_settings.js:46 #: erpnext/buying/doctype/buying_settings/buying_settings.json #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.json -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:336 -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:438 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:342 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:444 #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.js:88 #: erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:70 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:272 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:279 #: erpnext/buying/workspace/buying/buying.json #: erpnext/stock/doctype/material_request/material_request.js:205 #: erpnext/workspace_sidebar/buying.json @@ -44924,7 +45017,7 @@ msgstr "" msgid "Research" msgstr "" -#: erpnext/setup/doctype/company/company.py:514 +#: erpnext/setup/doctype/company/company.py:515 msgid "Research & Development" msgstr "" @@ -45012,7 +45105,7 @@ msgstr "" msgid "Reserved" msgstr "" -#: erpnext/controllers/stock_controller.py:1505 +#: erpnext/controllers/stock_controller.py:1516 msgid "Reserved Batch Conflict" msgstr "" @@ -45086,7 +45179,7 @@ msgstr "" msgid "Reserved Quantity for Production" msgstr "" -#: erpnext/stock/stock_ledger.py:2383 +#: erpnext/stock/stock_ledger.py:2385 msgid "Reserved Serial No." msgstr "" @@ -45104,13 +45197,13 @@ msgstr "" #: erpnext/stock/report/reserved_stock/reserved_stock.json #: erpnext/stock/report/stock_balance/stock_balance.py:569 #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.py:205 -#: erpnext/stock/stock_ledger.py:2367 +#: erpnext/stock/stock_ledger.py:2369 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:205 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:333 msgid "Reserved Stock" msgstr "" -#: erpnext/stock/stock_ledger.py:2412 +#: erpnext/stock/stock_ledger.py:2414 msgid "Reserved Stock for Batch" msgstr "" @@ -45325,12 +45418,6 @@ msgstr "" msgid "Restrict" msgstr "" -#. Label of the enable_overdue_billing_threshold (Check) field in DocType -#. 'Accounts Settings' -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json -msgid "Restrict Customer Over Billing" -msgstr "" - #. Label of the restrict_based_on (Select) field in DocType 'Party Specific #. Item' #: erpnext/selling/doctype/party_specific_item/party_specific_item.json @@ -45374,7 +45461,7 @@ msgstr "" msgid "Resume" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:661 +#: erpnext/manufacturing/doctype/job_card/job_card.js:671 msgid "Resume Job" msgstr "" @@ -45490,7 +45577,7 @@ msgstr "" msgid "Return Issued" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:328 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:368 msgid "Return Purchase Invoice cannot be held." msgstr "" @@ -45864,7 +45951,7 @@ msgstr "" msgid "Root Type" msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:403 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:415 msgid "Root Type for {0} must be one of the Asset, Liability, Income, Expense and Equity" msgstr "" @@ -45947,7 +46034,7 @@ msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/report/purchase_register/purchase_register.py:298 -#: erpnext/accounts/report/sales_register/sales_register.py:326 +#: erpnext/accounts/report/sales_register/sales_register.py:335 #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/selling/doctype/quotation/quotation.json @@ -46030,8 +46117,8 @@ msgstr "" msgid "Rounding Loss Allowance should be between 0 and 1" msgstr "" -#: erpnext/controllers/stock_controller.py:847 -#: erpnext/controllers/stock_controller.py:862 +#: erpnext/controllers/stock_controller.py:858 +#: erpnext/controllers/stock_controller.py:873 msgid "Rounding gain/loss Entry for Stock Transfer" msgstr "" @@ -46074,7 +46161,7 @@ msgstr "" msgid "Row # {0}: Returned Item {1} does not exist in {2} {3}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:354 +#: erpnext/manufacturing/doctype/work_order/work_order.py:361 msgid "Row #1: Sequence ID must be 1 for Operation {0}." msgstr "" @@ -46092,11 +46179,11 @@ msgstr "" msgid "Row #{0}: A reorder entry already exists for warehouse {1} with reorder type {2}." msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:378 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:381 msgid "Row #{0}: Acceptance Criteria Formula is incorrect." msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:358 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:361 msgid "Row #{0}: Acceptance Criteria Formula is required." msgstr "" @@ -46109,7 +46196,7 @@ msgstr "" msgid "Row #{0}: Accepted Warehouse is mandatory for the accepted Item {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:1326 +#: erpnext/controllers/accounts_controller.py:1362 msgid "Row #{0}: Account {1} does not belong to company {2}" msgstr "" @@ -46126,7 +46213,7 @@ msgstr "" msgid "Row #{0}: Allocated amount:{1} is greater than outstanding amount:{2} for Payment Term {3}" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:279 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:305 msgid "Row #{0}: Amount must be a positive number" msgstr "" @@ -46142,7 +46229,7 @@ msgstr "" msgid "Row #{0}: BOM is not specified for subcontracting item {0}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:302 +#: erpnext/selling/doctype/sales_order/sales_order.py:303 msgid "Row #{0}: BOM not found for FG Item {1}" msgstr "" @@ -46174,35 +46261,35 @@ msgstr "" msgid "Row #{0}: Cannot create entry with different taxable AND withholding document links." msgstr "" -#: erpnext/controllers/accounts_controller.py:3864 +#: erpnext/controllers/accounts_controller.py:3900 msgid "Row #{0}: Cannot delete item {1} which has already been billed." msgstr "" -#: erpnext/controllers/accounts_controller.py:3838 +#: erpnext/controllers/accounts_controller.py:3874 msgid "Row #{0}: Cannot delete item {1} which has already been delivered" msgstr "" -#: erpnext/controllers/accounts_controller.py:3857 +#: erpnext/controllers/accounts_controller.py:3893 msgid "Row #{0}: Cannot delete item {1} which has already been received" msgstr "" -#: erpnext/controllers/accounts_controller.py:3844 +#: erpnext/controllers/accounts_controller.py:3880 msgid "Row #{0}: Cannot delete item {1} which has work order assigned to it." msgstr "" -#: erpnext/controllers/accounts_controller.py:3850 +#: erpnext/controllers/accounts_controller.py:3886 msgid "Row #{0}: Cannot delete item {1} which is already ordered against this Sales Order." msgstr "" -#: erpnext/controllers/accounts_controller.py:4172 +#: erpnext/controllers/accounts_controller.py:4208 msgid "Row #{0}: Cannot set Rate if the billed amount is greater than the amount for Item {1}." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1162 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1171 msgid "Row #{0}: Cannot transfer more than Required Qty {1} for Item {2} against Job Card {3}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1338 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1408 msgid "Row #{0}: Cannot transfer {1} {2} of Item {3}. Maximum transferable quantity is {4} {2}." msgstr "" @@ -46210,23 +46297,23 @@ msgstr "" msgid "Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:254 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:280 msgid "Row #{0}: Consumed Asset {1} cannot be Draft" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:257 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:283 msgid "Row #{0}: Consumed Asset {1} cannot be cancelled" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:239 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:265 msgid "Row #{0}: Consumed Asset {1} cannot be the same as the Target Asset" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:248 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:274 msgid "Row #{0}: Consumed Asset {1} cannot be {2}" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:262 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:288 msgid "Row #{0}: Consumed Asset {1} does not belong to company {2}" msgstr "" @@ -46252,11 +46339,11 @@ msgstr "" msgid "Row #{0}: Customer Provided Item {1} cannot be added multiple times in the Subcontracting Inward process." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:431 +#: erpnext/manufacturing/doctype/work_order/work_order.py:438 msgid "Row #{0}: Customer Provided Item {1} cannot be added multiple times." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:456 +#: erpnext/manufacturing/doctype/work_order/work_order.py:463 msgid "Row #{0}: Customer Provided Item {1} does not exist in the Required Items table linked to the Subcontracting Inward Order." msgstr "" @@ -46264,7 +46351,7 @@ msgstr "" msgid "Row #{0}: Customer Provided Item {1} exceeds quantity available through Subcontracting Inward Order" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:444 +#: erpnext/manufacturing/doctype/work_order/work_order.py:451 msgid "Row #{0}: Customer Provided Item {1} has insufficient quantity in the Subcontracting Inward Order. Available quantity is {2}." msgstr "" @@ -46293,38 +46380,42 @@ msgstr "" msgid "Row #{0}: Duplicate entry in References {1} {2}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:332 +#: erpnext/selling/doctype/sales_order/sales_order.py:333 msgid "Row #{0}: Expected Delivery Date cannot be before Purchase Order Date" msgstr "" -#: erpnext/controllers/stock_controller.py:1058 +#: erpnext/controllers/stock_controller.py:1069 msgid "Row #{0}: Expense Account not set for the Item {1}. {2}" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:149 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:150 msgid "Row #{0}: Expense account {1} is not valid for Purchase Invoice {2}. Only expense accounts from non-stock items are allowed." msgstr "" +#: erpnext/manufacturing/doctype/bom/bom.py:332 +msgid "Row #{0}: FG / Semi FG Item is required for the operation {1} as 'Track Semi Finished Goods' is enabled." +msgstr "" + #: erpnext/buying/doctype/purchase_order/purchase_order.py:366 -#: erpnext/selling/doctype/sales_order/sales_order.py:305 +#: erpnext/selling/doctype/sales_order/sales_order.py:306 msgid "Row #{0}: Finished Good Item Qty can not be zero" msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order.py:348 -#: erpnext/selling/doctype/sales_order/sales_order.py:285 +#: erpnext/selling/doctype/sales_order/sales_order.py:286 msgid "Row #{0}: Finished Good Item is not specified for service item {1}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:339 +#: erpnext/manufacturing/doctype/bom/bom.py:367 msgid "Row #{0}: Finished Good Item {1} cannot be added in the Secondary Items table." msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order.py:355 -#: erpnext/selling/doctype/sales_order/sales_order.py:292 +#: erpnext/selling/doctype/sales_order/sales_order.py:293 msgid "Row #{0}: Finished Good Item {1} must be a sub-contracted item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:656 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:661 msgid "Row #{0}: Finished Good must be {1}" msgstr "" @@ -46353,7 +46444,7 @@ msgstr "" msgid "Row #{0}: From Date cannot be before To Date" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:894 +#: erpnext/manufacturing/doctype/job_card/job_card.py:901 msgid "Row #{0}: From Time and To Time fields are required" msgstr "" @@ -46361,7 +46452,7 @@ msgstr "" msgid "Row #{0}: Item added" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1967 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2041 msgid "Row #{0}: Item {1} cannot be transferred more than {2} against {3} {4}" msgstr "" @@ -46377,7 +46468,7 @@ msgstr "" msgid "Row #{0}: Item {1} has no stock in warehouse {2}." msgstr "" -#: erpnext/controllers/stock_controller.py:203 +#: erpnext/controllers/stock_controller.py:205 msgid "Row #{0}: Item {1} has zero rate but '{2}' is not enabled." msgstr "" @@ -46398,15 +46489,15 @@ msgstr "" msgid "Row #{0}: Item {1} is not a part of Subcontracting Inward Order {2}" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:273 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:299 msgid "Row #{0}: Item {1} is not a service item" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:227 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:253 msgid "Row #{0}: Item {1} is not a stock item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1104 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1109 msgid "Row #{0}: Item {1} is not part of the source manufacture entry and cannot be added to this disassembly." msgstr "" @@ -46418,7 +46509,7 @@ msgstr "" msgid "Row #{0}: Item {1} mismatch. Changing of item code is not permitted." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1113 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1118 msgid "Row #{0}: Item {1} quantity ({2} in stock UOM) does not match the quantity derived from the source ({3}). Do not change the UOM, conversion factor or quantity of disassembly rows." msgstr "" @@ -46434,7 +46525,7 @@ msgstr "" msgid "Row #{0}: Next Depreciation Date cannot be before Purchase Date" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:673 +#: erpnext/selling/doctype/sales_order/sales_order.py:674 msgid "Row #{0}: Not allowed to change Supplier as Purchase Order already exists" msgstr "" @@ -46446,7 +46537,7 @@ msgstr "" msgid "Row #{0}: Opening Accumulated Depreciation must be less than or equal to {1}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1168 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1173 msgid "Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}." msgstr "" @@ -46475,11 +46566,11 @@ msgstr "" msgid "Row #{0}: Please set reorder quantity" msgstr "" -#: erpnext/controllers/accounts_controller.py:641 +#: erpnext/controllers/accounts_controller.py:660 msgid "Row #{0}: Please update deferred revenue/expense account in item row or default account in company master" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:346 +#: erpnext/manufacturing/doctype/bom/bom.py:374 #, python-format msgid "Row #{0}: Process Loss Percentage should be less than 100% for {1} Item {2}" msgstr "" @@ -46488,8 +46579,8 @@ msgstr "" msgid "Row #{0}: Qty increased by {1}" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:230 -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:276 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:256 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:302 msgid "Row #{0}: Qty must be a positive number" msgstr "" @@ -46497,15 +46588,15 @@ msgstr "" msgid "Row #{0}: Qty should be less than or equal to Available Qty to Reserve (Actual Qty - Reserved Qty) {1} for Iem {2} against Batch {3} in Warehouse {4}." msgstr "" -#: erpnext/controllers/stock_controller.py:1643 +#: erpnext/controllers/stock_controller.py:1654 msgid "Row #{0}: Quality Inspection is required for Item {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:1658 +#: erpnext/controllers/stock_controller.py:1669 msgid "Row #{0}: Quality Inspection {1} is not submitted for the item: {2}" msgstr "" -#: erpnext/controllers/stock_controller.py:1673 +#: erpnext/controllers/stock_controller.py:1684 msgid "Row #{0}: Quality Inspection {1} was rejected for item {2}" msgstr "" @@ -46513,11 +46604,11 @@ msgstr "" msgid "Row #{0}: Quantity cannot be a non-positive number. Please increase the quantity or remove the Item {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:1489 +#: erpnext/controllers/accounts_controller.py:1525 msgid "Row #{0}: Quantity for Item {1} cannot be zero." msgstr "" -#: erpnext/crm/doctype/opportunity/opportunity.py:152 +#: erpnext/crm/doctype/opportunity/opportunity.py:154 msgid "Row #{0}: Quantity must be greater than 0 for Item {1}" msgstr "" @@ -46529,14 +46620,14 @@ msgstr "" msgid "Row #{0}: Quantity to reserve for the Item {1} should be greater than 0." msgstr "" -#: erpnext/controllers/accounts_controller.py:904 -#: erpnext/controllers/accounts_controller.py:916 +#: erpnext/controllers/accounts_controller.py:940 +#: erpnext/controllers/accounts_controller.py:952 #: erpnext/utilities/transaction_base.py:172 #: erpnext/utilities/transaction_base.py:178 msgid "Row #{0}: Rate must be same as {1}: {2} ({3} / {4})" msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:316 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:319 msgid "Row #{0}: Reading {1} {2} is not a valid number in the {3} number format. Use {4} as the decimal separator." msgstr "" @@ -46556,7 +46647,7 @@ msgstr "" msgid "Row #{0}: Rejected Warehouse is mandatory for the rejected Item {1}" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:167 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:168 msgid "Row #{0}: Repair cost {1} exceeds available amount {2} for Purchase Invoice {3} and Account {4}" msgstr "" @@ -46584,11 +46675,11 @@ msgid "" "\t\t\t\t\tthis validation." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:360 +#: erpnext/manufacturing/doctype/work_order/work_order.py:367 msgid "Row #{0}: Sequence ID must be {1} or {2} for Operation {3}." msgstr "" -#: erpnext/controllers/stock_controller.py:358 +#: erpnext/controllers/stock_controller.py:369 msgid "Row #{0}: Serial No {1} does not belong to Batch {2}" msgstr "" @@ -46604,19 +46695,19 @@ msgstr "" msgid "Row #{0}: Serial No(s) {1} are not a part of the linked Subcontracting Inward Order. Please select valid Serial No(s)." msgstr "" -#: erpnext/controllers/accounts_controller.py:669 +#: erpnext/controllers/accounts_controller.py:705 msgid "Row #{0}: Service End Date cannot be before Invoice Posting Date" msgstr "" -#: erpnext/controllers/accounts_controller.py:663 +#: erpnext/controllers/accounts_controller.py:699 msgid "Row #{0}: Service Start Date cannot be greater than Service End Date" msgstr "" -#: erpnext/controllers/accounts_controller.py:657 +#: erpnext/controllers/accounts_controller.py:693 msgid "Row #{0}: Service Start and End Date is required for deferred accounting" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:495 +#: erpnext/selling/doctype/sales_order/sales_order.py:496 msgid "Row #{0}: Set Supplier for item {1}" msgstr "" @@ -46628,19 +46719,19 @@ msgstr "" msgid "Row #{0}: Source Warehouse must be same as Customer Warehouse {1} from the linked Subcontracting Inward Order" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:465 +#: erpnext/manufacturing/doctype/work_order/work_order.py:472 msgid "Row #{0}: Source Warehouse {1} for item {2} cannot be a customer warehouse." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:420 +#: erpnext/manufacturing/doctype/work_order/work_order.py:427 msgid "Row #{0}: Source Warehouse {1} for item {2} must be same as Source Warehouse {3} in the Work Order." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1372 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1442 msgid "Row #{0}: Source and Target Warehouse cannot be the same for Material Transfer" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1394 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1464 msgid "Row #{0}: Source, Target Warehouse and Inventory Dimensions cannot be the exact same for Material Transfer" msgstr "" @@ -46693,10 +46784,14 @@ msgstr "" msgid "Row #{0}: Target Warehouse must be same as Customer Warehouse {1} from the linked Subcontracting Inward Order" msgstr "" -#: erpnext/controllers/stock_controller.py:371 +#: erpnext/controllers/stock_controller.py:382 msgid "Row #{0}: The batch {1} has already expired." msgstr "" +#: erpnext/manufacturing/doctype/bom/bom.py:342 +msgid "Row #{0}: The operation {1} has 'Is Final Finished Good' checked, so its FG / Semi FG Item must be {2}." +msgstr "" + #: erpnext/stock/doctype/item/item.py:581 msgid "Row #{0}: The warehouse {1} is not a child warehouse of a group warehouse {2}" msgstr "" @@ -46713,7 +46808,7 @@ msgstr "" msgid "Row #{0}: Total Number of Depreciations must be greater than zero" msgstr "" -#: erpnext/controllers/stock_controller.py:155 +#: erpnext/controllers/stock_controller.py:157 msgid "Row #{0}: Warehouse {1} does not match with the warehouse {2} in Serial and Batch Bundle {3}." msgstr "" @@ -46741,11 +46836,11 @@ msgstr "" msgid "Row #{0}: {1} can not be negative for item {2}" msgstr "" -#: erpnext/controllers/stock_controller.py:1322 +#: erpnext/controllers/stock_controller.py:1333 msgid "Row #{0}: {1} is mandatory for the Inventory Dimension {2}." msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:371 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:374 msgid "Row #{0}: {1} is not a valid reading field. Please refer to the field description." msgstr "" @@ -46757,7 +46852,7 @@ msgstr "" msgid "Row #{0}: {1} of {2} should be {3}. Please update the {1} or select a different account." msgstr "" -#: erpnext/controllers/accounts_controller.py:3979 +#: erpnext/controllers/accounts_controller.py:4015 msgid "Row #{0}:Quantity for Item {1} cannot be zero." msgstr "" @@ -46773,7 +46868,7 @@ msgstr "" msgid "Row #{idx}: Item rate has been updated as per valuation rate since its an internal stock transfer." msgstr "" -#: erpnext/controllers/buying_controller.py:1142 +#: erpnext/controllers/buying_controller.py:1150 msgid "Row #{idx}: Please enter a location for the asset item {item_code}." msgstr "" @@ -46793,7 +46888,7 @@ msgstr "" msgid "Row #{idx}: {from_warehouse_field} and {to_warehouse_field} cannot be same." msgstr "" -#: erpnext/controllers/buying_controller.py:1259 +#: erpnext/controllers/buying_controller.py:1267 msgid "Row #{idx}: {schedule_date} cannot be before {transaction_date}." msgstr "" @@ -46858,15 +46953,15 @@ msgstr "" msgid "Row #{}: {} {} does not exist." msgstr "" -#: erpnext/stock/doctype/item/item.py:1537 +#: erpnext/stock/doctype/item/item.py:1540 msgid "Row #{}: {} {} doesn't belong to Company {}. Please select valid {}." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:450 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:490 msgid "Row No {0}: Warehouse is required. Please set a Default Warehouse for Item {1} and Company {2}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:748 +#: erpnext/manufacturing/doctype/job_card/job_card.py:752 msgid "Row {0} : Operation is required against the raw material item {1}" msgstr "" @@ -46874,7 +46969,7 @@ msgstr "" msgid "Row {0} picked quantity is less than the required quantity, additional {1} {2} required." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1991 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2065 msgid "Row {0}# Item {1} not found in 'Raw Materials Supplied' table in {2} {3}" msgstr "" @@ -46906,7 +47001,7 @@ msgstr "" msgid "Row {0}: Allocated amount {1} must be less than or equal to remaining payment amount {2}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1663 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1737 msgid "Row {0}: As {1} is enabled, raw materials cannot be added to {2} entry. Use {3} entry to consume raw materials." msgstr "" @@ -46926,7 +47021,7 @@ msgstr "" msgid "Row {0}: Conversion Factor is mandatory" msgstr "" -#: erpnext/controllers/accounts_controller.py:3270 +#: erpnext/controllers/accounts_controller.py:3306 msgid "Row {0}: Cost Center {1} does not belong to Company {2}" msgstr "" @@ -46938,7 +47033,7 @@ msgstr "" msgid "Row {0}: Credit entry can not be linked with a {1}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:579 +#: erpnext/manufacturing/doctype/bom/bom.py:607 msgid "Row {0}: Currency of the BOM #{1} should be equal to the selected currency {2}" msgstr "" @@ -46954,7 +47049,7 @@ msgstr "" msgid "Row {0}: Delivery Warehouse cannot be same as Customer Warehouse for Item {1}." msgstr "" -#: erpnext/controllers/accounts_controller.py:2770 +#: erpnext/controllers/accounts_controller.py:2806 msgid "Row {0}: Due Date in the Payment Terms table cannot be before Posting Date" msgstr "" @@ -46963,7 +47058,7 @@ msgid "Row {0}: Either Delivery Note Item or Packed Item reference is mandatory. msgstr "" #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1037 -#: erpnext/controllers/taxes_and_totals.py:1382 +#: erpnext/controllers/taxes_and_totals.py:1422 msgid "Row {0}: Exchange Rate is mandatory" msgstr "" @@ -46979,19 +47074,19 @@ msgstr "" msgid "Row {0}: Expense Account {1} is linked to company {2}. Please select an account belonging to company {3}." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:540 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:580 msgid "Row {0}: Expense Head changed to {1} as no Purchase Receipt is created against Item {2}." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:497 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:537 msgid "Row {0}: Expense Head changed to {1} because account {2} is not linked to warehouse {3} or it is not the default inventory account" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:522 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:562 msgid "Row {0}: Expense Head changed to {1} because expense is booked against this account in Purchase Receipt {2}" msgstr "" -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:156 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:162 msgid "Row {0}: For Supplier {1}, Email Address is Required to send an email" msgstr "" @@ -46999,16 +47094,16 @@ msgstr "" msgid "Row {0}: From Time and To Time is mandatory." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:326 +#: erpnext/manufacturing/doctype/job_card/job_card.py:330 #: erpnext/projects/doctype/timesheet/timesheet.py:225 msgid "Row {0}: From Time and To Time of {1} is overlapping with {2}" msgstr "" -#: erpnext/controllers/stock_controller.py:1739 +#: erpnext/controllers/stock_controller.py:1750 msgid "Row {0}: From Warehouse is mandatory for internal transfers" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:317 +#: erpnext/manufacturing/doctype/job_card/job_card.py:321 msgid "Row {0}: From time must be less than to time" msgstr "" @@ -47044,7 +47139,7 @@ msgstr "" msgid "Row {0}: Item {1}'s quantity cannot be higher than the available quantity." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1245 +#: erpnext/manufacturing/doctype/bom/bom.py:1266 msgid "Row {0}: Operation time should be greater than 0 for operation {1}" msgstr "" @@ -47116,7 +47211,7 @@ msgstr "" msgid "Row {0}: Qty cannot be greater than {1} for the Item {2}." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:747 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:752 msgid "Row {0}: Qty in Stock UOM can not be zero." msgstr "" @@ -47128,7 +47223,7 @@ msgstr "" msgid "Row {0}: Quantity cannot be negative." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1242 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1247 msgid "Row {0}: Quantity not available for {4} in warehouse {1} at posting time of the entry ({2} {3})" msgstr "" @@ -47136,7 +47231,7 @@ msgstr "" msgid "Row {0}: Sales Invoice {1} is already created for {2}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:353 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:358 msgid "Row {0}: Serial/Batch has been reset to values linked with Work Order {1} because the previously selected serial/batch does not belong to this Work Order." msgstr "" @@ -47144,11 +47239,11 @@ msgstr "" msgid "Row {0}: Shift cannot be changed since the depreciation has already been processed" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2004 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2078 msgid "Row {0}: Subcontracted Item is mandatory for the raw material {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:1730 +#: erpnext/controllers/stock_controller.py:1741 msgid "Row {0}: Target Warehouse is mandatory for internal transfers" msgstr "" @@ -47156,15 +47251,15 @@ msgstr "" msgid "Row {0}: Task {1} does not belong to Project {2}" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.js:187 +#: erpnext/assets/doctype/asset_repair/asset_repair.js:202 msgid "Row {0}: The entire expense amount for account {1} in {2} has already been allocated." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:793 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:798 msgid "Row {0}: The item {1}, quantity must be positive number" msgstr "" -#: erpnext/controllers/accounts_controller.py:3247 +#: erpnext/controllers/accounts_controller.py:3283 msgid "Row {0}: The {3} Account {1} does not belong to the company {2}" msgstr "" @@ -47172,11 +47267,11 @@ msgstr "" msgid "Row {0}: To set {1} periodicity, difference between from and to date must be greater than or equal to {2}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3986 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4111 msgid "Row {0}: Transferred quantity cannot be greater than the requested quantity." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:741 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:746 msgid "Row {0}: UOM Conversion Factor is mandatory" msgstr "" @@ -47192,12 +47287,12 @@ msgstr "" msgid "Row {0}: Warehouse {1} is linked to company {2}. Please select a warehouse belonging to company {3}." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1239 -#: erpnext/manufacturing/doctype/work_order/work_order.py:494 +#: erpnext/manufacturing/doctype/bom/bom.py:1260 +#: erpnext/manufacturing/doctype/work_order/work_order.py:501 msgid "Row {0}: Workstation or Workstation Type is mandatory for an operation {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:1208 +#: erpnext/controllers/accounts_controller.py:1244 msgid "Row {0}: user has not applied the rule {1} on the item {2}" msgstr "" @@ -47209,7 +47304,7 @@ msgstr "" msgid "Row {0}: {1} must be greater than 0" msgstr "" -#: erpnext/controllers/accounts_controller.py:814 +#: erpnext/controllers/accounts_controller.py:850 msgid "Row {0}: {1} {2} cannot be same as {3} (Party Account) {4}" msgstr "" @@ -47225,11 +47320,11 @@ msgstr "" msgid "Row {0}: {2} Item {1} does not exist in {2} {3}" msgstr "" -#: erpnext/utilities/transaction_base.py:626 +#: erpnext/utilities/transaction_base.py:640 msgid "Row {1}: Quantity ({0}) cannot be a fraction. To allow this, disable '{2}' in UOM {3}." msgstr "" -#: erpnext/controllers/buying_controller.py:1124 +#: erpnext/controllers/buying_controller.py:1132 msgid "Row {idx}: Asset Naming Series is mandatory for the auto creation of assets for item {item_code}." msgstr "" @@ -47255,7 +47350,7 @@ msgstr "" msgid "Rows with Same Account heads will be merged on Ledger" msgstr "" -#: erpnext/controllers/accounts_controller.py:2781 +#: erpnext/controllers/accounts_controller.py:2817 msgid "Rows with duplicate due dates in other rows were found: {0}" msgstr "" @@ -47263,7 +47358,7 @@ msgstr "" msgid "Rows: {0} have 'Payment Entry' as reference_type. This should not be set manually." msgstr "" -#: erpnext/controllers/accounts_controller.py:307 +#: erpnext/controllers/accounts_controller.py:326 msgid "Rows: {0} in {1} section are Invalid. Reference Name should point to a valid Payment Entry or Journal Entry." msgstr "" @@ -47476,13 +47571,13 @@ msgstr "" #: erpnext/accounts/doctype/tax_category/tax_category_dashboard.py:9 #: erpnext/accounts/doctype/tax_rule/tax_rule.json #: erpnext/crm/doctype/opportunity/opportunity.js:288 -#: erpnext/crm/doctype/opportunity/opportunity.py:168 +#: erpnext/crm/doctype/opportunity/opportunity.py:170 #: erpnext/projects/doctype/project/project_dashboard.py:15 #: erpnext/regional/report/vat_audit_report/vat_audit_report.py:145 #: erpnext/selling/doctype/quotation/quotation.json #: erpnext/selling/doctype/sales_order/sales_order.json -#: erpnext/setup/doctype/company/company.py:460 -#: erpnext/setup/doctype/company/company.py:652 +#: erpnext/setup/doctype/company/company.py:461 +#: erpnext/setup/doctype/company/company.py:653 #: erpnext/setup/doctype/company/company_dashboard.py:9 #: erpnext/setup/doctype/sales_person/sales_person_dashboard.py:12 #: erpnext/setup/install.py:423 @@ -47497,7 +47592,7 @@ msgstr "" msgid "Sales & Purchase" msgstr "" -#: erpnext/setup/doctype/company/company.py:652 +#: erpnext/setup/doctype/company/company.py:653 msgid "Sales Account" msgstr "" @@ -47697,7 +47792,7 @@ msgstr "" msgid "Sales Invoice {0} has already been submitted" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:591 +#: erpnext/selling/doctype/sales_order/sales_order.py:592 msgid "Sales Invoice {0} must be deleted before cancelling this Sales Order" msgstr "" @@ -47752,7 +47847,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:380 #: erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:284 -#: erpnext/accounts/report/sales_register/sales_register.py:252 +#: erpnext/accounts/report/sales_register/sales_register.py:261 #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json #: erpnext/controllers/selling_controller.py:494 @@ -47896,12 +47991,12 @@ msgstr "" msgid "Sales Order required for Item {0}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:356 +#: erpnext/selling/doctype/sales_order/sales_order.py:357 msgid "Sales Order {0} already exists against Customer's Purchase Order {1}. To allow multiple Sales Orders, Enable {2} in {3}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1805 -#: erpnext/selling/doctype/sales_order/sales_order.py:1818 +#: erpnext/selling/doctype/sales_order/sales_order.py:1837 +#: erpnext/selling/doctype/sales_order/sales_order.py:1850 msgid "Sales Order {0} is not available for production" msgstr "" @@ -47909,7 +48004,7 @@ msgstr "" msgid "Sales Order {0} is not submitted" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:570 +#: erpnext/manufacturing/doctype/work_order/work_order.py:577 msgid "Sales Order {0} is not valid" msgstr "" @@ -47966,7 +48061,7 @@ msgstr "" #: erpnext/accounts/doctype/promotional_scheme/promotional_scheme.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/report/accounts_receivable/accounts_receivable.js:130 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1260 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1292 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js:117 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:194 #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js:74 @@ -48072,7 +48167,7 @@ msgstr "" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:158 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.js:136 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1257 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1289 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js:123 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:191 #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js:80 @@ -48165,7 +48260,7 @@ msgstr "" msgid "Sales Representative" msgstr "" -#: erpnext/accounts/report/gross_profit/gross_profit.py:997 +#: erpnext/accounts/report/gross_profit/gross_profit.py:1091 #: erpnext/stock/doctype/delivery_note/delivery_note.js:270 msgid "Sales Return" msgstr "" @@ -48316,7 +48411,7 @@ msgstr "" msgid "Same item cannot be entered multiple times." msgstr "" -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:125 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:129 msgid "Same supplier has been entered multiple times" msgstr "" @@ -48340,12 +48435,12 @@ msgstr "" #. Label of the sample_size (Float) field in DocType 'Quality Inspection' #: erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py:93 -#: erpnext/public/js/controllers/transaction.js:2882 +#: erpnext/public/js/controllers/transaction.js:2886 #: erpnext/stock/doctype/quality_inspection/quality_inspection.json msgid "Sample Size" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:4489 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4614 msgid "Sample quantity {0} cannot be more than received quantity {1}" msgstr "" @@ -48403,7 +48498,7 @@ msgstr "" msgid "Scan Barcode" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:171 +#: erpnext/public/js/utils/serial_no_batch_selector.js:181 msgid "Scan Batch No" msgstr "" @@ -48419,7 +48514,7 @@ msgstr "" msgid "Scan Mode" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:156 +#: erpnext/public/js/utils/serial_no_batch_selector.js:166 msgid "Scan Serial No" msgstr "" @@ -48450,7 +48545,7 @@ msgstr "" msgid "Schedule Date" msgstr "" -#: erpnext/public/js/controllers/transaction.js:543 +#: erpnext/public/js/controllers/transaction.js:546 msgid "Schedule Name" msgstr "" @@ -48640,7 +48735,7 @@ msgstr "" msgid "Search transactions" msgstr "" -#: erpnext/stock/doctype/item/item.js:804 +#: erpnext/stock/doctype/item/item.js:813 msgid "Search values..." msgstr "" @@ -48760,7 +48855,7 @@ msgstr "" msgid "Select Alternative Items for Sales Order" msgstr "" -#: erpnext/stock/doctype/item/item.js:930 +#: erpnext/stock/doctype/item/item.js:939 msgid "Select Attribute Values" msgstr "" @@ -48772,7 +48867,7 @@ msgstr "" msgid "Select BOM and Qty for Production" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.js:243 +#: erpnext/assets/doctype/asset_repair/asset_repair.js:258 #: erpnext/public/js/utils/sales_common.js:441 #: erpnext/stock/doctype/pick_list/pick_list.js:399 msgid "Select Batch No" @@ -48802,7 +48897,7 @@ msgstr "" msgid "Select Company Address" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:476 +#: erpnext/manufacturing/doctype/job_card/job_card.js:487 msgid "Select Corrective Operation" msgstr "" @@ -48820,8 +48915,8 @@ msgstr "" msgid "Select Date of joining. It will have impact on the first salary calculation, Leave allocation on pro-rata bases." msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:116 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:147 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:127 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:158 msgid "Select Default Supplier" msgstr "" @@ -48838,7 +48933,7 @@ msgstr "" msgid "Select Dispatch Address " msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:705 +#: erpnext/manufacturing/doctype/job_card/job_card.js:715 msgid "Select Employees" msgstr "" @@ -48863,7 +48958,7 @@ msgstr "" msgid "Select Items based on Delivery Date" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2917 +#: erpnext/public/js/controllers/transaction.js:2921 msgid "Select Items for Quality Inspection" msgstr "" @@ -48893,7 +48988,7 @@ msgstr "" msgid "Select Loyalty Program" msgstr "" -#: erpnext/public/js/controllers/transaction.js:529 +#: erpnext/public/js/controllers/transaction.js:532 msgid "Select Payment Schedule" msgstr "" @@ -48901,18 +48996,18 @@ msgstr "" msgid "Select Possible Supplier" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1120 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1147 #: erpnext/stock/doctype/pick_list/pick_list.js:224 msgid "Select Quantity" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.js:243 +#: erpnext/assets/doctype/asset_repair/asset_repair.js:258 #: erpnext/public/js/utils/sales_common.js:441 #: erpnext/stock/doctype/pick_list/pick_list.js:399 msgid "Select Serial No" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.js:246 +#: erpnext/assets/doctype/asset_repair/asset_repair.js:261 #: erpnext/public/js/utils/sales_common.js:444 #: erpnext/stock/doctype/pick_list/pick_list.js:402 msgid "Select Serial and Batch" @@ -49008,7 +49103,7 @@ msgstr "" msgid "Select all" msgstr "" -#: erpnext/stock/doctype/item/item.js:1272 +#: erpnext/stock/doctype/item/item.js:1281 msgid "Select an Item Group." msgstr "" @@ -49030,7 +49125,7 @@ msgstr "" msgid "Select at least one Item" msgstr "" -#: erpnext/stock/doctype/item/item.js:944 +#: erpnext/stock/doctype/item/item.js:953 msgid "Select at least one attribute value." msgstr "" @@ -49048,7 +49143,7 @@ msgstr "" msgid "Select date" msgstr "" -#: erpnext/controllers/accounts_controller.py:3022 +#: erpnext/controllers/accounts_controller.py:3058 msgid "Select finance book for the item {0} at row {1}" msgstr "" @@ -49067,7 +49162,7 @@ msgstr "" msgid "Select row {0}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:476 +#: erpnext/manufacturing/doctype/bom/bom.js:478 msgid "Select template item" msgstr "" @@ -49080,11 +49175,11 @@ msgstr "" msgid "Select the Default Workstation where the Operation will be performed. This will be fetched in BOMs and Work Orders." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1236 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1263 msgid "Select the Item to be manufactured." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:992 +#: erpnext/manufacturing/doctype/bom/bom.js:994 msgid "Select the Item to be manufactured. The Item name, UoM, Company, and Currency will be fetched automatically." msgstr "" @@ -49115,11 +49210,11 @@ msgstr "" msgid "Select the modules that you plan to implement" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:1011 +#: erpnext/manufacturing/doctype/bom/bom.js:1013 msgid "Select the raw materials (Items) required to manufacture the Item" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:531 +#: erpnext/manufacturing/doctype/bom/bom.js:533 msgid "Select variant item code for the template item {0}" msgstr "" @@ -49309,7 +49404,7 @@ msgid "Send Emails to Suppliers" msgstr "" #. Label of the send_sms (Button) field in DocType 'SMS Center' -#: erpnext/public/js/controllers/transaction.js:729 +#: erpnext/public/js/controllers/transaction.js:732 #: erpnext/selling/doctype/sms_center/sms_center.json msgid "Send SMS" msgstr "" @@ -49456,8 +49551,8 @@ msgstr "" #: erpnext/manufacturing/doctype/job_card/job_card.json #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.js:74 #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.py:114 -#: erpnext/public/js/controllers/transaction.js:2895 -#: erpnext/public/js/utils/serial_no_batch_selector.js:432 +#: erpnext/public/js/controllers/transaction.js:2899 +#: erpnext/public/js/utils/serial_no_batch_selector.js:442 #: erpnext/selling/doctype/installation_note_item/installation_note_item.json #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json #: erpnext/stock/doctype/packed_item/packed_item.json @@ -49513,11 +49608,11 @@ msgstr "" msgid "Serial No Ledger" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:270 +#: erpnext/public/js/utils/serial_no_batch_selector.js:280 msgid "Serial No Range" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2802 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2805 msgid "Serial No Reserved" msgstr "" @@ -49586,7 +49681,7 @@ msgstr "" msgid "Serial No status sync has been queued. Reload the report after a few minutes." msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:603 +#: erpnext/public/js/utils/serial_no_batch_selector.js:613 msgid "Serial No {0} already exists" msgstr "" @@ -49607,7 +49702,7 @@ msgstr "" msgid "Serial No {0} does not exist" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:3591 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:3594 msgid "Serial No {0} does not exists" msgstr "" @@ -49644,15 +49739,15 @@ msgid "Serial No: {0} has already been transacted into another POS Invoice." msgstr "" #: erpnext/public/js/utils/barcode_scanner.js:297 -#: erpnext/public/js/utils/serial_no_batch_selector.js:16 -#: erpnext/public/js/utils/serial_no_batch_selector.js:201 +#: erpnext/public/js/utils/serial_no_batch_selector.js:26 +#: erpnext/public/js/utils/serial_no_batch_selector.js:211 #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js:50 #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:170 msgid "Serial Nos" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:20 -#: erpnext/public/js/utils/serial_no_batch_selector.js:205 +#: erpnext/public/js/utils/serial_no_batch_selector.js:30 +#: erpnext/public/js/utils/serial_no_batch_selector.js:215 msgid "Serial Nos / Batch Nos" msgstr "" @@ -49661,11 +49756,11 @@ msgstr "" msgid "Serial Nos / Batches" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2074 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2077 msgid "Serial Nos are created successfully" msgstr "" -#: erpnext/stock/stock_ledger.py:2373 +#: erpnext/stock/stock_ledger.py:2375 msgid "Serial Nos are reserved in Stock Reservation Entries, you need to unreserve them before proceeding." msgstr "" @@ -49746,19 +49841,19 @@ msgstr "" msgid "Serial and Batch Bundle" msgstr "" -#: erpnext/stock/doctype/item/item.py:1132 +#: erpnext/stock/doctype/item/item.py:1135 msgid "Serial and Batch Bundle Exists" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2303 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2306 msgid "Serial and Batch Bundle created" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2399 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2402 msgid "Serial and Batch Bundle updated" msgstr "" -#: erpnext/controllers/stock_controller.py:251 +#: erpnext/controllers/stock_controller.py:253 msgid "Serial and Batch Bundle {0} is already used in {1} {2}." msgstr "" @@ -49766,7 +49861,7 @@ msgstr "" msgid "Serial and Batch Bundle {0} is not submitted" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2373 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2376 msgid "Serial and Batch Bundle {0} is submitted and its entries cannot be modified." msgstr "" @@ -49822,7 +49917,7 @@ msgstr "" msgid "Serial number {0} entered more than once" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_item_details.js:451 +#: erpnext/selling/page/point_of_sale/pos_item_details.js:462 msgid "Serial numbers unavailable for Item {0} under warehouse {1}. Please try changing warehouse." msgstr "" @@ -50022,12 +50117,12 @@ msgid "Service Stop Date" msgstr "" #: erpnext/accounts/deferred_revenue.py:45 -#: erpnext/public/js/controllers/transaction.js:1804 +#: erpnext/public/js/controllers/transaction.js:1808 msgid "Service Stop Date cannot be after Service End Date" msgstr "" #: erpnext/accounts/deferred_revenue.py:42 -#: erpnext/public/js/controllers/transaction.js:1801 +#: erpnext/public/js/controllers/transaction.js:1805 msgid "Service Stop Date cannot be before Service Start Date" msgstr "" @@ -50051,12 +50146,12 @@ msgstr "" #. Label of the set_basic_rate_manually (Check) field in DocType 'Stock Entry #. Detail' -#: erpnext/stock/doctype/stock_entry/stock_entry.py:420 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:425 #: erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json msgid "Set Basic Rate Manually" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:180 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:191 msgid "Set Default Supplier" msgstr "" @@ -50070,11 +50165,6 @@ msgstr "" msgid "Set Dropship Items Delivered Quantity" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:362 -#: erpnext/manufacturing/doctype/job_card/job_card.js:424 -msgid "Set Finished Good Quantity" -msgstr "" - #. Label of the set_from_warehouse (Link) field in DocType 'Purchase Invoice' #. Label of the set_from_warehouse (Link) field in DocType 'Purchase Order' #. Label of the set_from_warehouse (Link) field in DocType 'Purchase Receipt' @@ -50098,6 +50188,7 @@ msgstr "" #. Label of the set_landed_cost_based_on_purchase_invoice_rate (Check) field in #. DocType 'Buying Settings' +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:361 #: erpnext/buying/doctype/buying_settings/buying_settings.json msgid "Set Landed Cost Based on Purchase Invoice Rate" msgstr "" @@ -50131,7 +50222,7 @@ msgstr "" msgid "Set Posting Date" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:1038 +#: erpnext/manufacturing/doctype/bom/bom.js:1040 msgid "Set Process Loss Item Quantity" msgstr "" @@ -50242,11 +50333,11 @@ msgstr "" msgid "Set closing balance as per bank statement" msgstr "" -#: erpnext/setup/doctype/company/company.py:550 +#: erpnext/setup/doctype/company/company.py:551 msgid "Set default inventory account for perpetual inventory" msgstr "" -#: erpnext/setup/doctype/company/company.py:576 +#: erpnext/setup/doctype/company/company.py:577 msgid "Set default {0} account for non stock items" msgstr "" @@ -50262,7 +50353,7 @@ msgstr "" msgid "Set incoming rate as zero for expired Batch" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:1028 +#: erpnext/manufacturing/doctype/bom/bom.js:1030 msgid "Set quantity of process loss item:" msgstr "" @@ -50278,7 +50369,7 @@ msgstr "" msgid "Set targets Item Group-wise for this Sales Person." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1293 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1320 msgid "Set the Planned Start Date (an Estimated Date at which you want the Production to begin)" msgstr "" @@ -50293,7 +50384,7 @@ msgstr "" msgid "Set the status manually." msgstr "" -#: erpnext/regional/italy/setup.py:231 +#: erpnext/regional/italy/setup.py:235 msgid "Set this if the customer is a Public Administration company." msgstr "" @@ -50388,8 +50479,8 @@ msgstr "" msgid "Setting up company" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1218 -#: erpnext/manufacturing/doctype/work_order/work_order.py:1645 +#: erpnext/manufacturing/doctype/bom/bom.py:1239 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1638 msgid "Setting {0} is required" msgstr "" @@ -50610,6 +50701,55 @@ msgstr "" msgid "Shipping Account" msgstr "" +#. Option for the 'Determine Address Tax Category from' (Select) field in +#. DocType 'Accounts Settings' +#. Label of the shipping_address (Text Editor) field in DocType 'POS Invoice' +#. Label of the shipping_address_display (Text Editor) field in DocType +#. 'Purchase Invoice' +#. Label of the company_shipping_address_section (Section Break) field in +#. DocType 'Purchase Invoice' +#. Label of the shipping_address (Text Editor) field in DocType 'Sales Invoice' +#. Label of the shipping_address_section (Section Break) field in DocType +#. 'Sales Invoice' +#. Label of the shipping_address (Link) field in DocType 'Purchase Order' +#. Label of the shipping_address_section (Section Break) field in DocType +#. 'Purchase Order' +#. Label of the shipping_address (Link) field in DocType 'Supplier Quotation' +#. Label of the shipping_address_section (Section Break) field in DocType +#. 'Supplier Quotation' +#. Label of the shipping_address_name (Link) field in DocType 'Quotation' +#. Label of the shipping_address (Text Editor) field in DocType 'Quotation' +#. Label of the shipping_address_section (Section Break) field in DocType +#. 'Quotation' +#. Label of the shipping_address (Text Editor) field in DocType 'Sales Order' +#. Label of the shipping_address_column (Section Break) field in DocType 'Sales +#. Order' +#. Label of the shipping_address_name (Link) field in DocType 'Delivery Note' +#. Label of the shipping_address (Text Editor) field in DocType 'Delivery Note' +#. Label of the shipping_address_section (Section Break) field in DocType +#. 'Delivery Note' +#. Label of the shipping_address_display (Text Editor) field in DocType +#. 'Purchase Receipt' +#. Label of the section_break_98 (Section Break) field in DocType 'Purchase +#. Receipt' +#. Label of the shipping_address_display (Text Editor) field in DocType +#. 'Subcontracting Receipt' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.json +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.json +#: erpnext/buying/doctype/purchase_order/purchase_order.json +#: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json +#: erpnext/selling/doctype/quotation/quotation.json +#: erpnext/selling/doctype/sales_order/sales_order.json +#: erpnext/stock/doctype/delivery_note/delivery_note.json +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +#: erpnext/stock/report/delayed_item_report/delayed_item_report.py:128 +#: erpnext/stock/report/delayed_order_report/delayed_order_report.py:53 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json +msgid "Shipping Address" +msgstr "" + #. Label of the shipping_address_display (Text Editor) field in DocType #. 'Purchase Order' #. Label of the shipping_address_display (Text Editor) field in DocType @@ -50639,7 +50779,7 @@ msgstr "" msgid "Shipping Address Template" msgstr "" -#: erpnext/controllers/accounts_controller.py:600 +#: erpnext/controllers/accounts_controller.py:619 msgid "Shipping Address does not belong to the {0}" msgstr "" @@ -50791,10 +50931,6 @@ msgstr "" msgid "Shortage Qty" msgstr "" -#: banking/src/components/features/Settings/KeyboardShortcuts.tsx:85 -msgid "Shortcut" -msgstr "" - #: erpnext/buying/report/purchase_analytics/purchase_analytics.js:70 #: erpnext/selling/report/sales_analytics/sales_analytics.js:103 msgid "Show Aggregate Value from Subsidiary Companies" @@ -50950,7 +51086,7 @@ msgstr "" msgid "Show Variant Attributes" msgstr "" -#: erpnext/stock/doctype/item/item.js:201 +#: erpnext/stock/doctype/item/item.js:207 msgid "Show Variants" msgstr "" @@ -51116,11 +51252,11 @@ msgstr "" msgid "Simultaneous" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:871 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:876 msgid "Since there is a process loss of {0} units for the finished good {1}, you should reduce the quantity by {0} units for the finished good {1} in the Items Table." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:323 +#: erpnext/manufacturing/doctype/bom/bom.py:351 msgid "Since you have enabled 'Track Semi Finished Goods', at least one operation must have 'Is Final Finished Good' checked. For that set the FG / Semi FG Item as {0} against an operation." msgstr "" @@ -51150,7 +51286,7 @@ msgstr "" msgid "Single Tier Program" msgstr "" -#: erpnext/stock/doctype/item/item.js:226 +#: erpnext/stock/doctype/item/item.js:232 msgid "Single Variant" msgstr "" @@ -51228,7 +51364,7 @@ msgstr "" msgid "Solvency Ratios" msgstr "" -#: erpnext/controllers/accounts_controller.py:4430 +#: erpnext/controllers/accounts_controller.py:4466 msgid "Some required Company details are missing. You don't have permission to update them. Please contact your System Manager." msgstr "" @@ -51259,24 +51395,10 @@ msgstr "" msgid "Source Document" msgstr "" -#. Label of the reference_name (Dynamic Link) field in DocType 'Batch' -#. Label of the reference_name (Dynamic Link) field in DocType 'Serial No' -#: erpnext/stock/doctype/batch/batch.json -#: erpnext/stock/doctype/serial_no/serial_no.json -msgid "Source Document Name" -msgstr "" - #: erpnext/stock/report/serial_no_and_batch_traceability/serial_no_and_batch_traceability.py:492 msgid "Source Document No" msgstr "" -#. Label of the reference_doctype (Link) field in DocType 'Batch' -#. Label of the reference_doctype (Link) field in DocType 'Serial No' -#: erpnext/stock/doctype/batch/batch.json -#: erpnext/stock/doctype/serial_no/serial_no.json -msgid "Source Document Type" -msgstr "" - #. Label of the source_exchange_rate (Float) field in DocType 'Payment Entry' #: erpnext/accounts/doctype/payment_entry/payment_entry.json msgid "Source Exchange Rate" @@ -51292,7 +51414,7 @@ msgstr "" msgid "Source Location" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1030 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1039 msgid "Source Manufacture Entry" msgstr "" @@ -51301,11 +51423,11 @@ msgstr "" msgid "Source Stock Entry (Manufacture)" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1033 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1038 msgid "Source Stock Entry {0} belongs to Work Order {1}, not {2}. Please use a manufacture entry from the same Work Order." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2756 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2830 msgid "Source Stock Entry {0} has no finished goods quantity" msgstr "" @@ -51329,7 +51451,7 @@ msgstr "" #. Label of the s_warehouse (Link) field in DocType 'Stock Entry Detail' #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/manufacturing/doctype/bom/bom.js:503 +#: erpnext/manufacturing/doctype/bom/bom.js:505 #: erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json #: erpnext/manufacturing/doctype/bom_item/bom_item.json #: erpnext/manufacturing/doctype/bom_operation/bom_operation.json @@ -51363,7 +51485,7 @@ msgstr "" msgid "Source Warehouse is mandatory for the Item {0}." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:379 +#: erpnext/manufacturing/doctype/work_order/work_order.py:386 msgid "Source Warehouse {0} must be same as Customer Warehouse {1} in the Subcontracting Inward Order." msgstr "" @@ -51371,7 +51493,7 @@ msgstr "" msgid "Source and Target Location cannot be same" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:999 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1004 msgid "Source and target warehouse cannot be same for row {0}" msgstr "" @@ -51384,13 +51506,13 @@ msgstr "" msgid "Source of Funds (Liabilities)" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:966 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:982 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:989 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:971 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:987 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:994 msgid "Source warehouse is mandatory for row {0}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:455 +#: erpnext/selling/doctype/sales_order/sales_order.py:456 msgid "Source warehouse required for stock item {0}" msgstr "" @@ -51535,17 +51657,17 @@ msgstr "" msgid "Stale Days" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:169 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:170 msgid "Stale Days should start from 1." msgstr "" #: erpnext/setup/setup_wizard/operations/defaults_setup.py:70 #: erpnext/setup/setup_wizard/operations/install_fixtures.py:488 -#: erpnext/tests/utils.py:275 +#: erpnext/tests/utils.py:276 msgid "Standard Buying" msgstr "" -#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:73 +#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:79 msgid "Standard Description" msgstr "" @@ -51555,8 +51677,8 @@ msgstr "" #: erpnext/setup/setup_wizard/operations/defaults_setup.py:70 #: erpnext/setup/setup_wizard/operations/install_fixtures.py:496 -#: erpnext/stock/doctype/item/item.py:276 erpnext/tests/utils.py:283 -#: erpnext/tests/utils.py:2519 +#: erpnext/stock/doctype/item/item.py:276 erpnext/tests/utils.py:284 +#: erpnext/tests/utils.py:2543 msgid "Standard Selling" msgstr "" @@ -51616,7 +51738,7 @@ msgstr "" msgid "Start Date should be lower than End Date" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.js:660 +#: erpnext/manufacturing/doctype/job_card/job_card.js:670 #: erpnext/manufacturing/doctype/workstation/workstation.js:124 msgid "Start Job" msgstr "" @@ -51759,7 +51881,7 @@ msgstr "" msgid "Status must be one of {0}" msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:283 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:286 msgid "Status set to rejected as there are one or more rejected readings." msgstr "" @@ -51789,8 +51911,8 @@ msgstr "" #: erpnext/accounts/doctype/account/account.json #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:96 #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:158 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1416 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1455 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1456 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1495 #: erpnext/accounts/report/account_balance/account_balance.js:58 msgid "Stock Adjustment" msgstr "" @@ -51841,7 +51963,7 @@ msgstr "" #. Label of a Link in the Stock Workspace #. Label of a Workspace Sidebar Item #: erpnext/selling/doctype/quotation_item/quotation_item.json -#: erpnext/stock/doctype/item/item.js:148 +#: erpnext/stock/doctype/item/item.js:154 #: erpnext/stock/doctype/warehouse/warehouse.js:62 #: erpnext/stock/report/stock_balance/stock_balance.json #: erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py:107 @@ -51913,7 +52035,7 @@ msgstr "" msgid "Stock Details" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1210 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1215 msgid "Stock Entries already created for Work Order {0}: {1}" msgstr "" @@ -51977,7 +52099,7 @@ msgstr "" msgid "Stock Entry {0} created" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1614 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1769 msgid "Stock Entry {0} has created" msgstr "" @@ -52023,7 +52145,7 @@ msgstr "" #. Label of a Workspace Sidebar Item #: erpnext/public/js/controllers/stock_controller.js:97 #: erpnext/public/js/utils/ledger_preview.js:37 -#: erpnext/stock/doctype/item/item.js:158 +#: erpnext/stock/doctype/item/item.js:164 #: erpnext/stock/doctype/item/item_dashboard.py:8 #: erpnext/stock/report/stock_ledger/stock_ledger.json #: erpnext/stock/workspace/stock/stock.json @@ -52140,7 +52262,7 @@ msgstr "" #. Name of a report #. Label of a Link in the Stock Workspace #. Label of a Workspace Sidebar Item -#: erpnext/stock/doctype/item/item.js:168 +#: erpnext/stock/doctype/item/item.js:174 #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.json #: erpnext/stock/workspace/stock/stock.json #: erpnext/workspace_sidebar/stock.json @@ -52269,9 +52391,9 @@ msgstr "" msgid "Stock Reservation Entries Cancelled" msgstr "" -#: erpnext/controllers/subcontracting_inward_controller.py:1037 +#: erpnext/controllers/subcontracting_inward_controller.py:1039 #: erpnext/manufacturing/doctype/production_plan/production_plan.py:2261 -#: erpnext/manufacturing/doctype/work_order/work_order.py:2416 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2408 #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1784 msgid "Stock Reservation Entries Created" msgstr "" @@ -52339,7 +52461,7 @@ msgstr "" #: erpnext/selling/doctype/selling_settings/selling_settings.py:115 #: erpnext/setup/doctype/company/company.json #: erpnext/setup/workspace/erpnext_settings/erpnext_settings.json -#: erpnext/stock/doctype/item/item.js:409 +#: erpnext/stock/doctype/item/item.js:418 #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:675 #: erpnext/stock/doctype/stock_settings/stock_settings.json #: erpnext/stock/workspace/stock/stock.json @@ -52379,6 +52501,7 @@ msgstr "" #. Label of the stock_uom (Link) field in DocType 'BOM Explosion Item' #. Label of the stock_uom (Link) field in DocType 'BOM Item' #. Label of the stock_uom (Link) field in DocType 'BOM Secondary Item' +#. Label of the stock_uom (Link) field in DocType 'Job Card' #. Label of the stock_uom (Link) field in DocType 'Job Card Item' #. Label of the stock_uom (Link) field in DocType 'Job Card Secondary Item' #. Label of the stock_uom (Link) field in DocType 'Production Plan Sub Assembly @@ -52421,11 +52544,12 @@ msgstr "" #: erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json #: erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json #: erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.py:213 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:216 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:223 #: erpnext/manufacturing/doctype/bom_creator_item/bom_creator_item.json #: erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json #: erpnext/manufacturing/doctype/bom_item/bom_item.json #: erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.json +#: erpnext/manufacturing/doctype/job_card/job_card.json #: erpnext/manufacturing/doctype/job_card_item/job_card_item.json #: erpnext/manufacturing/doctype/job_card_secondary_item/job_card_secondary_item.json #: erpnext/manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json @@ -52475,7 +52599,7 @@ msgstr "" msgid "Stock Uom" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:768 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:808 msgid "Stock Update Not Allowed" msgstr "" @@ -52595,11 +52719,11 @@ msgstr "" msgid "Stock cannot be updated because the invoice contains a drop shipping item. Please disable 'Update Stock' or remove the drop shipping item." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:765 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:805 msgid "Stock cannot be updated for Purchase Invoice {0} because a Purchase Receipt {1} has already been created for this transaction. Please disable the 'Update Stock' checkbox in the Purchase Invoice and save the invoice." msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:124 +#: erpnext/stock/doctype/warehouse/warehouse.py:144 msgid "Stock entries exist with the old account. Changing the account may lead to a mismatch between the warehouse closing balance and the account closing balance. The overall closing balance will still match, but not for the specific account." msgstr "" @@ -52663,14 +52787,14 @@ msgstr "" msgid "Stop Reason" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1236 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1229 msgid "Stopped Work Order cannot be cancelled, Unstop it first to cancel" msgstr "" #: erpnext/setup/doctype/company/company.py:387 #: erpnext/setup/setup_wizard/operations/defaults_setup.py:33 #: erpnext/setup/setup_wizard/operations/install_fixtures.py:540 -#: erpnext/stock/doctype/item/item.py:313 erpnext/tests/utils.py:248 +#: erpnext/stock/doctype/item/item.py:313 erpnext/tests/utils.py:249 msgid "Stores" msgstr "" @@ -52728,7 +52852,7 @@ msgstr "" #. Label of the operation (Link) field in DocType 'Job Card Time Log' #. Name of a DocType -#: erpnext/manufacturing/doctype/job_card/job_card.js:309 +#: erpnext/manufacturing/doctype/job_card/job_card.js:361 #: erpnext/manufacturing/doctype/job_card_time_log/job_card_time_log.json #: erpnext/manufacturing/doctype/sub_operation/sub_operation.json msgid "Sub Operation" @@ -53118,11 +53242,11 @@ msgstr "" msgid "Submit this Work Order for further processing." msgstr "" -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:318 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:324 msgid "Submit your Quotation" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1524 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1653 msgid "Submitted Job Card cannot be processed." msgstr "" @@ -53262,7 +53386,7 @@ msgstr "" msgid "Successfully Reconciled" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:194 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:205 msgid "Successfully Set Supplier" msgstr "" @@ -53446,7 +53570,7 @@ msgstr "" #: erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js:15 #: erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.py:30 #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:51 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:197 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:204 #: erpnext/buying/workspace/buying/buying.json #: erpnext/controllers/trends.py:461 erpnext/crm/doctype/contract/contract.json #: erpnext/manufacturing/doctype/blanket_order/blanket_order.json @@ -53564,7 +53688,7 @@ msgstr "" #: erpnext/accounts/doctype/tax_rule/tax_rule.json #: erpnext/accounts/report/accounts_payable/accounts_payable.js:119 #: erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js:102 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1264 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1296 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:198 #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py:178 #: erpnext/accounts/report/purchase_register/purchase_register.js:27 @@ -53627,7 +53751,7 @@ msgstr "" msgid "Supplier Invoice No" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1851 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1889 msgid "Supplier Invoice No exists in Purchase Invoice {0}" msgstr "" @@ -53665,7 +53789,7 @@ msgstr "" #. Label of the supplier_name (Data) field in DocType 'Purchase Receipt' #. Label of the supplier_name (Data) field in DocType 'Stock Entry' #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1179 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1211 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:156 #: erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py:196 #: erpnext/accounts/report/purchase_register/purchase_register.py:193 @@ -53744,7 +53868,7 @@ msgstr "" #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.py:234 #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:60 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:258 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:265 #: erpnext/buying/workspace/buying/buying.json #: erpnext/crm/doctype/opportunity/opportunity.js:81 #: erpnext/selling/doctype/quotation/quotation.json @@ -53771,7 +53895,7 @@ msgstr "" msgid "Supplier Quotation Item" msgstr "" -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:512 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:518 msgid "Supplier Quotation {0} Created" msgstr "" @@ -53860,7 +53984,7 @@ msgstr "" #. Label of the supplier_warehouse (Link) field in DocType 'Purchase Receipt' #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/buying/doctype/purchase_order/purchase_order.json -#: erpnext/manufacturing/doctype/job_card/job_card.js:91 +#: erpnext/manufacturing/doctype/job_card/job_card.js:95 #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json msgid "Supplier Warehouse" msgstr "" @@ -53905,7 +54029,7 @@ msgstr "" msgid "Supplies subject to the reverse charge provision" msgstr "" -#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:317 +#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:313 #: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:382 msgid "Supply" msgstr "" @@ -54023,7 +54147,7 @@ msgstr "" msgid "System will fetch all the entries if limit value is zero." msgstr "" -#: erpnext/controllers/accounts_controller.py:2261 +#: erpnext/controllers/accounts_controller.py:2297 msgid "System will not check over billing since amount for Item {0} in {1} is zero" msgstr "" @@ -54033,6 +54157,14 @@ msgstr "" msgid "System will notify to increase or decrease quantity or amount " msgstr "" +#. Description of the 'Allow Stale Exchange Rates' (Check) field in DocType +#. 'Accounts Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "" +"System will use the latest saved Currency Exchange rate on or before the transaction date, however old it is.
    \n" +"Uncheck to ignore rates older than Stale Days and fetch a fresh rate from the exchange rate provider instead." +msgstr "" + #. Description of the 'Tax Withholding Category' (Link) field in DocType #. 'Supplier' #: erpnext/buying/doctype/supplier/supplier.json @@ -54046,7 +54178,7 @@ msgstr "" msgid "TDS Computation Summary" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1609 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1649 msgid "TDS Deducted" msgstr "" @@ -54090,23 +54222,23 @@ msgstr "" msgid "Target Asset" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:212 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:238 msgid "Target Asset {0} cannot be cancelled" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:210 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:236 msgid "Target Asset {0} cannot be submitted" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:206 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:232 msgid "Target Asset {0} cannot be {1}" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:216 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:242 msgid "Target Asset {0} does not belong to company {1}" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:195 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:221 msgid "Target Asset {0} needs to be composite asset" msgstr "" @@ -54152,7 +54284,7 @@ msgstr "" msgid "Target Item Code" msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:186 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:212 msgid "Target Item {0} must be a Fixed Asset item" msgstr "" @@ -54213,7 +54345,7 @@ msgstr "" msgid "Target Warehouse Address Link" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:324 +#: erpnext/manufacturing/doctype/work_order/work_order.py:331 msgid "Target Warehouse Reservation Error" msgstr "" @@ -54221,7 +54353,7 @@ msgstr "" msgid "Target Warehouse for Finished Good must be same as Finished Good Warehouse {1} in Work Order {2} linked to the Subcontracting Inward Order." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:924 +#: erpnext/manufacturing/doctype/work_order/work_order.py:917 msgid "Target Warehouse is required before Submit" msgstr "" @@ -54229,13 +54361,13 @@ msgstr "" msgid "Target Warehouse is set for some items but the customer is not an internal customer." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:395 +#: erpnext/manufacturing/doctype/work_order/work_order.py:402 msgid "Target Warehouse {0} must be same as Delivery Warehouse {1} in the Subcontracting Inward Order Item." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:972 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:978 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:993 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:977 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:983 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:998 msgid "Target warehouse is mandatory for row {0}" msgstr "" @@ -54454,7 +54586,7 @@ msgstr "" #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js:86 #: erpnext/accounts/report/general_ledger/general_ledger.js:142 #: erpnext/accounts/report/purchase_register/purchase_register.py:208 -#: erpnext/accounts/report/sales_register/sales_register.py:229 +#: erpnext/accounts/report/sales_register/sales_register.py:238 #: erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js:67 #: erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py:203 #: erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py:56 @@ -54543,7 +54675,7 @@ msgstr "" msgid "Tax Template is mandatory." msgstr "" -#: erpnext/accounts/report/sales_register/sales_register.py:309 +#: erpnext/accounts/report/sales_register/sales_register.py:318 msgid "Tax Total" msgstr "" @@ -54698,7 +54830,7 @@ msgstr "" #. Detail' #: erpnext/accounts/doctype/item_wise_tax_detail/item_wise_tax_detail.json #: erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py:237 -#: erpnext/controllers/taxes_and_totals.py:1253 +#: erpnext/controllers/taxes_and_totals.py:1293 msgid "Taxable Amount" msgstr "" @@ -54906,11 +55038,11 @@ msgstr "" msgid "Television" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:455 +#: erpnext/manufacturing/doctype/bom/bom.js:457 msgid "Template Item" msgstr "" -#: erpnext/stock/get_item_details.py:342 +#: erpnext/stock/get_item_details.py:427 msgid "Template Item Selected" msgstr "" @@ -55122,7 +55254,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/doctype/territory_item/territory_item.json #: erpnext/accounts/report/accounts_receivable/accounts_receivable.js:142 -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1248 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1280 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js:108 #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:182 #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js:68 @@ -55131,7 +55263,7 @@ msgstr "" #: erpnext/accounts/report/inactive_sales_items/inactive_sales_items.js:8 #: erpnext/accounts/report/inactive_sales_items/inactive_sales_items.py:22 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:259 -#: erpnext/accounts/report/sales_register/sales_register.py:223 +#: erpnext/accounts/report/sales_register/sales_register.py:232 #: erpnext/controllers/trends.py:410 erpnext/controllers/trends.py:434 #: erpnext/controllers/trends.py:499 erpnext/crm/doctype/lead/lead.json #: erpnext/crm/doctype/opportunity/opportunity.json @@ -55222,7 +55354,7 @@ msgstr "" msgid "The 'From Package No.' field must neither be empty nor it's value less than 1." msgstr "" -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:423 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:429 msgid "The Access to Request for Quotation From Portal is Disabled. To Allow Access, Enable it in Portal Settings." msgstr "" @@ -55231,7 +55363,7 @@ msgstr "" msgid "The BOM which will be replaced" msgstr "" -#: erpnext/stock/serial_batch_bundle.py:1631 +#: erpnext/stock/serial_batch_bundle.py:1634 msgid "The Batch {0} has negative batch quantity {1}. To fix this, go to the batch and click on Recalculate Batch Qty. If the issue still persists, create an inward entry." msgstr "" @@ -55259,6 +55391,10 @@ msgstr "" msgid "The GL Entries will be cancelled in the background, it can take a few minutes." msgstr "" +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3317 +msgid "The Job Card {0} has only {1} left to produce, but this entry books {2} ({3} finished goods and {4} process loss). Cancel or update its other manufacture entries first." +msgstr "" + #: erpnext/accounts/doctype/loyalty_program/loyalty_program.py:178 msgid "The Loyalty Program isn't valid for the selected company" msgstr "" @@ -55275,7 +55411,7 @@ msgstr "" msgid "The Pick List having Stock Reservation Entries cannot be updated. If you need to make changes, we recommend canceling the existing Stock Reservation Entries before updating the Pick List." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3208 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3273 msgid "The Process Loss Qty has reset as per job cards Process Loss Qty" msgstr "" @@ -55287,11 +55423,11 @@ msgstr "" msgid "The Serial No at Row #{0}: {1} is not available in warehouse {2}." msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2799 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2802 msgid "The Serial No {0} is reserved against the {1} {2} and cannot be used for any other transaction." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2174 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2248 msgid "The Serial and Batch Bundle {0} is not valid for this transaction. The 'Type of Transaction' should be 'Outward' instead of 'Inward' in Serial and Batch Bundle {0}" msgstr "" @@ -55335,7 +55471,7 @@ msgstr "" msgid "The bank account is not a company account. Please select a company account" msgstr "" -#: erpnext/controllers/stock_controller.py:1496 +#: erpnext/controllers/stock_controller.py:1507 msgid "The batch {0} is reserved for {1} in the warehouse {2} and the remaining quantity is not enough to cover the reservations. So, cannot proceed with the {3} {4}." msgstr "" @@ -55351,10 +55487,14 @@ msgstr "" msgid "The company {0} is not in United Arab Emirates. UAE VAT 201 report is only available for companies in United Arab Emirates." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1379 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1416 msgid "The completed quantity {0} of an operation {1} cannot be greater than the completed quantity {2} of a previous operation {3}." msgstr "" +#: erpnext/manufacturing/doctype/job_card/job_card.py:1496 +msgid "The completed quantity {0} of an operation {1} cannot be greater than the manufactured quantity {2} of a previous operation {3}. Submit the manufacturing entry for the operation {3} first." +msgstr "" + #: erpnext/accounts/doctype/dunning/dunning.py:87 msgid "The currency of invoice {} ({}) is different from the currency of this dunning ({})." msgstr "" @@ -55371,7 +55511,7 @@ msgstr "" msgid "The date of the transaction" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1241 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1268 msgid "The default BOM for that item will be fetched by the system. You can also change the BOM." msgstr "" @@ -55433,7 +55573,7 @@ msgstr "" msgid "The following Items, having Putaway Rules, could not be accomodated:" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:141 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:142 msgid "The following Purchase Invoices are not submitted:" msgstr "" @@ -55445,7 +55585,7 @@ msgstr "" msgid "The following batches are expired, please restock them:
    {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:451 +#: erpnext/controllers/accounts_controller.py:470 msgid "The following cancelled repost entries exist for {0}:

    {1}

    Kindly delete these entries before continuing." msgstr "" @@ -55467,7 +55607,7 @@ msgid "" "{0}" msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:115 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:116 msgid "The following rows are duplicates:" msgstr "" @@ -55498,7 +55638,7 @@ msgstr "" msgid "The invoice is not fully allocated as there is a difference of {0}." msgstr "" -#: erpnext/controllers/buying_controller.py:1326 +#: erpnext/controllers/buying_controller.py:1334 msgid "The item {item} is not marked as {type_of} item. You can enable it as {type_of} item from its Item master." msgstr "" @@ -55506,15 +55646,15 @@ msgstr "" msgid "The items {0} and {1} are present in the following {2} :" msgstr "" -#: erpnext/controllers/buying_controller.py:1319 +#: erpnext/controllers/buying_controller.py:1327 msgid "The items {items} are not marked as {type_of} item. You can enable them as {type_of} item from their Item masters." msgstr "" -#: erpnext/manufacturing/doctype/workstation/workstation.py:583 +#: erpnext/manufacturing/doctype/workstation/workstation.py:582 msgid "The job card {0} is in {1} state and you cannot complete." msgstr "" -#: erpnext/manufacturing/doctype/workstation/workstation.py:577 +#: erpnext/manufacturing/doctype/workstation/workstation.py:576 msgid "The job card {0} is in {1} state and you cannot start it again." msgstr "" @@ -55564,7 +55704,7 @@ msgstr "" msgid "The outstanding amount {0} in {1} is lesser than {2}. Updating the outstanding to this invoice." msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:233 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:245 msgid "The parent account {0} does not exists in the uploaded template" msgstr "" @@ -55664,7 +55804,7 @@ msgstr "" msgid "The shares don't exist with the {0}" msgstr "" -#: erpnext/stock/stock_ledger.py:866 +#: erpnext/stock/stock_ledger.py:868 msgid "The stock for the item {0} in the {1} warehouse was negative on the {2}. You should create a positive entry {3} before the date {4} and time {5} to post the correct valuation rate. For more details, please read the documentation." msgstr "" @@ -55710,7 +55850,7 @@ msgstr "" msgid "The uploaded file could not be parsed as a genericode XML document." msgstr "" -#: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py:178 +#: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.py:179 msgid "The uploaded file does not appear to be in valid MT940 format." msgstr "" @@ -55746,15 +55886,15 @@ msgstr "" msgid "The warehouse account(s) below are not of type 'Stock'. Please set a correct Stock asset account on the warehouse (Account Type must be 'Stock'):" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1269 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1296 msgid "The warehouse where you store finished Items before they are shipped." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1262 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1289 msgid "The warehouse where you store your raw materials. Each required item can have a separate source warehouse. Group warehouse also can be selected as source warehouse. On submission of the Work Order, the raw materials will be reserved in these warehouses for production usage." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1274 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1301 msgid "The warehouse where your Items will be transferred when you begin production. Group Warehouse can also be selected as a Work in Progress warehouse." msgstr "" @@ -55762,11 +55902,7 @@ msgstr "" msgid "The withdrawal or deposit amounts - only required if there's no amount column." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:909 -msgid "The {0} ({1}) must be equal to {2} ({3})" -msgstr "" - -#: erpnext/public/js/controllers/transaction.js:3387 +#: erpnext/public/js/controllers/transaction.js:3391 msgid "The {0} contains Unit Price Items." msgstr "" @@ -55782,7 +55918,7 @@ msgstr "" msgid "The {0} {1} does not match with the {0} {2} in the {3} {4}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1028 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1034 msgid "The {0} {1} is used to calculate the valuation cost for the finished good {2}." msgstr "" @@ -55827,7 +55963,7 @@ msgstr "" msgid "There are no transactions in the system for the selected bank account and dates that match the filters." msgstr "" -#: erpnext/stock/doctype/item/item.js:1296 +#: erpnext/stock/doctype/item/item.js:1305 msgid "There are two options to maintain valuation of stock. FIFO (first in - first out) and Moving Average. To understand this topic in detail please visit Item Valuation, FIFO and Moving Average." msgstr "" @@ -55867,7 +56003,7 @@ msgstr "" msgid "There is one unreconciled transaction before {0}." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2111 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2185 msgid "There must be atleast 1 Finished Good in this Stock Entry" msgstr "" @@ -55915,11 +56051,11 @@ msgstr "" msgid "This Fiscal Year" msgstr "" -#: erpnext/stock/doctype/item/item.js:194 +#: erpnext/stock/doctype/item/item.js:200 msgid "This Item is a Template and cannot be used in transactions.
    All fields present in the 'Copy Fields to Variant' table in Item Variant Settings will be copied to its variant items." msgstr "" -#: erpnext/stock/doctype/item/item.js:251 +#: erpnext/stock/doctype/item/item.js:257 msgid "This Item is a Variant of {0} (Template)." msgstr "" @@ -55939,7 +56075,7 @@ msgstr "" msgid "This Purchase Order has been fully subcontracted." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:2069 +#: erpnext/selling/doctype/sales_order/sales_order.py:2101 msgid "This Sales Order has been fully subcontracted." msgstr "" @@ -56082,15 +56218,15 @@ msgstr "" msgid "This is considered dangerous from accounting point of view." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:546 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:586 msgid "This is done to handle accounting for cases when Purchase Receipt is created after Purchase Invoice" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1255 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1282 msgid "This is enabled by default. If you want to plan materials for sub-assemblies of the Item you're manufacturing leave this enabled. If you plan and manufacture the sub-assemblies separately, you can disable this checkbox." msgstr "" -#: erpnext/stock/doctype/item/item.js:1284 +#: erpnext/stock/doctype/item/item.js:1293 msgid "This is for raw material Items that'll be used to create finished goods. If the Item is an additional service like 'washing' that'll be used in the BOM, keep this unchecked." msgstr "" @@ -56165,11 +56301,11 @@ msgstr "" msgid "This schedule was created when Asset {0} was adjusted through Asset Value Adjustment {1}." msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:479 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:507 msgid "This schedule was created when Asset {0} was consumed through Asset Capitalization {1}." msgstr "" -#: erpnext/assets/doctype/asset_repair/asset_repair.py:438 +#: erpnext/assets/doctype/asset_repair/asset_repair.py:446 msgid "This schedule was created when Asset {0} was repaired through Asset Repair {1}." msgstr "" @@ -56177,7 +56313,7 @@ msgstr "" msgid "This schedule was created when Asset {0} was restored due to Sales Invoice {1} cancellation." msgstr "" -#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:588 +#: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:616 msgid "This schedule was created when Asset {0} was restored on Asset Capitalization {1}'s cancellation." msgstr "" @@ -56399,11 +56535,11 @@ msgstr "" msgid "Time in mins." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:886 +#: erpnext/manufacturing/doctype/job_card/job_card.py:893 msgid "Time logs are required for {0} {1}" msgstr "" -#: erpnext/crm/doctype/appointment/appointment.py:133 +#: erpnext/crm/doctype/appointment/appointment.py:134 msgid "Time slot is not available" msgstr "" @@ -56411,13 +56547,6 @@ msgstr "" msgid "Time(in mins)" msgstr "" -#. Label of the section_break_18 (Section Break) field in DocType 'Project' -#. Label of the sb_timeline (Section Break) field in DocType 'Task' -#: erpnext/projects/doctype/project/project.json -#: erpnext/projects/doctype/task/task.json -msgid "Timeline" -msgstr "" - #. Description of the 'PCV Job Timeout (seconds)' (Int) field in DocType #. 'Accounts Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -56439,7 +56568,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:302 #: erpnext/projects/doctype/timesheet/timesheet.json #: erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py:26 -#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:59 +#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:68 #: erpnext/projects/workspace/projects/projects.json #: erpnext/templates/pages/projects.html:65 #: erpnext/workspace_sidebar/projects.json @@ -56514,7 +56643,7 @@ msgstr "" msgid "To Currency" msgstr "" -#: erpnext/controllers/accounts_controller.py:650 +#: erpnext/controllers/accounts_controller.py:669 #: erpnext/setup/doctype/holiday_list/holiday_list.py:121 msgid "To Date cannot be before From Date" msgstr "" @@ -56733,7 +56862,7 @@ msgstr "" msgid "To Warehouse (Optional)" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:1006 +#: erpnext/manufacturing/doctype/bom/bom.js:1008 msgid "To add Operations tick the 'With Operations' checkbox." msgstr "" @@ -56786,7 +56915,7 @@ msgid "To include sub-assembly costs and secondary items in Finished Goods on a msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:2268 -#: erpnext/controllers/accounts_controller.py:3280 +#: erpnext/controllers/accounts_controller.py:3316 msgid "To include tax in row {0} in Item rate, taxes in rows {1} must also be included" msgstr "" @@ -56810,11 +56939,11 @@ msgstr "" msgid "To still proceed with editing this Attribute Value, enable {0} in Item Variant Settings." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:637 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:677 msgid "To submit the invoice without purchase order please set {0} as {1} in {2}" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:659 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:699 msgid "To submit the invoice without purchase receipt please set {0} as {1} in {2}" msgstr "" @@ -56881,7 +57010,7 @@ msgstr "" #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:456 #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:465 #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.js:84 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:123 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:134 #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json #: erpnext/setup/doctype/email_digest/email_digest.json #: erpnext/stock/workspace/stock/stock.json @@ -57083,11 +57212,13 @@ msgstr "" #. Invoice' #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json +#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:195 msgid "Total Billing Amount" msgstr "" #. Label of the total_billing_hours (Float) field in DocType 'Sales Invoice' #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json +#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:189 msgid "Total Billing Hours" msgstr "" @@ -57114,12 +57245,15 @@ msgstr "" #. Label of the total_completed_qty (Float) field in DocType 'Job Card' #: erpnext/manufacturing/doctype/job_card/job_card.json -#: erpnext/manufacturing/doctype/job_card/job_card.py:905 #: erpnext/manufacturing/report/job_card_summary/job_card_summary.py:174 msgid "Total Completed Qty" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:192 +#: erpnext/manufacturing/doctype/job_card/job_card.py:913 +msgid "Total Completed Qty ({0}), Process Loss Qty ({1}) and Pending Qty ({2}) must add up to the Qty to Manufacture ({3})." +msgstr "" + +#: erpnext/manufacturing/doctype/job_card/job_card.py:196 msgid "Total Completed Qty is required for Job Card {0}, please start and complete the job card before submission" msgstr "" @@ -57421,7 +57555,7 @@ msgstr "" msgid "Total Paid Amount" msgstr "" -#: erpnext/controllers/accounts_controller.py:2835 +#: erpnext/controllers/accounts_controller.py:2871 msgid "Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total" msgstr "" @@ -57433,7 +57567,7 @@ msgstr "" msgid "Total Payments" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:722 +#: erpnext/selling/doctype/sales_order/sales_order.py:723 msgid "Total Picked Quantity {0} is more than ordered qty {1}. You can set the Over Picking Allowance in Stock Settings." msgstr "" @@ -57711,6 +57845,7 @@ msgstr "" #. Label of the total_hours (Float) field in DocType 'Timesheet' #: erpnext/manufacturing/doctype/workstation/workstation.json #: erpnext/projects/doctype/timesheet/timesheet.json +#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:183 msgid "Total Working Hours" msgstr "" @@ -57879,7 +58014,7 @@ msgstr "" msgid "Transaction Dates" msgstr "" -#: erpnext/setup/doctype/company/company.py:1093 +#: erpnext/setup/doctype/company/company.py:1094 msgid "Transaction Deletion Document {0} has been triggered for company {1}" msgstr "" @@ -58012,7 +58147,7 @@ msgstr "" msgid "Transaction from which tax is withheld" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:863 +#: erpnext/manufacturing/doctype/job_card/job_card.py:870 msgid "Transaction not allowed against stopped Work Order {0}" msgstr "" @@ -58042,7 +58177,7 @@ msgstr "" #: erpnext/accounts/doctype/bank_account/bank_account.json #: erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py:1058 #: erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template_dashboard.py:12 -#: erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template_dashboard.py:13 +#: erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template_dashboard.py:12 #: erpnext/manufacturing/doctype/job_card/job_card_dashboard.py:9 #: erpnext/manufacturing/doctype/production_plan/production_plan_dashboard.py:11 #: erpnext/manufacturing/doctype/work_order/work_order_dashboard.py:12 @@ -58055,7 +58190,7 @@ msgstr "" msgid "Transactions Annual History" msgstr "" -#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:117 +#: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:74 msgid "Transactions against the Company already exist! Chart of Accounts can only be imported for a Company with no transactions." msgstr "" @@ -58497,7 +58632,7 @@ msgstr "" #: erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json #: erpnext/buying/report/item_wise_purchase_history/item_wise_purchase_history.py:60 #: erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.py:207 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:212 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:219 #: erpnext/crm/doctype/opportunity_item/opportunity_item.json #: erpnext/manufacturing/doctype/bom_creator/bom_creator.json #: erpnext/manufacturing/doctype/bom_creator_item/bom_creator_item.json @@ -58511,7 +58646,7 @@ msgstr "" #: erpnext/manufacturing/doctype/sales_forecast_item/sales_forecast_item.json #: erpnext/manufacturing/doctype/work_order_additional_item/work_order_additional_item.json #: erpnext/manufacturing/doctype/workstation/workstation.js:480 -#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:70 +#: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:76 #: erpnext/manufacturing/report/bom_operations_time/bom_operations_time.py:110 #: erpnext/public/js/stock_analytics.js:94 erpnext/public/js/utils.js:861 #: erpnext/quality_management/doctype/quality_goal_objective/quality_goal_objective.json @@ -58627,7 +58762,7 @@ msgstr "" msgid "UOM Name" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:4411 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4536 msgid "UOM conversion factor required for UOM: {0} in Item: {1}" msgstr "" @@ -58703,7 +58838,7 @@ msgstr "" msgid "Unable to find score starting at {0}. You need to have standing scores covering 0 to 100" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1194 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1187 msgid "Unable to find the time slot in the next {0} days for the operation {1}. Please increase the 'Capacity Planning For (Days)' in the {2}." msgstr "" @@ -58811,7 +58946,7 @@ msgstr "" msgid "Unit Of Measure" msgstr "" -#: erpnext/controllers/accounts_controller.py:4162 +#: erpnext/controllers/accounts_controller.py:4198 msgid "Unit Price" msgstr "" @@ -59273,11 +59408,11 @@ msgstr "" msgid "Updating Costing and Billing fields against this Project..." msgstr "" -#: erpnext/stock/doctype/item/item.py:1521 +#: erpnext/stock/doctype/item/item.py:1524 msgid "Updating Variants..." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.js:1217 +#: erpnext/manufacturing/doctype/work_order/work_order.js:1244 msgid "Updating Work Order status" msgstr "" @@ -59398,7 +59533,7 @@ msgstr "" #. Label of the use_multi_level_bom (Check) field in DocType 'Work Order' #. Label of the use_multi_level_bom (Check) field in DocType 'Stock Entry' -#: erpnext/manufacturing/doctype/bom/bom.js:437 +#: erpnext/manufacturing/doctype/bom/bom.js:439 #: erpnext/manufacturing/doctype/work_order/work_order.json #: erpnext/stock/doctype/stock_entry/stock_entry.json msgid "Use Multi-Level BOM" @@ -59701,8 +59836,8 @@ msgstr "" #. Label of the valid_till (Date) field in DocType 'Supplier Quotation' #. Label of the valid_till (Date) field in DocType 'Quotation' #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:263 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:288 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:270 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:295 #: erpnext/selling/doctype/quotation/quotation.json #: erpnext/templates/pages/order.html:59 msgid "Valid Till" @@ -59891,11 +60026,11 @@ msgstr "" msgid "Valuation Rate (In / Out)" msgstr "" -#: erpnext/stock/stock_ledger.py:2099 +#: erpnext/stock/stock_ledger.py:2101 msgid "Valuation Rate Missing" msgstr "" -#: erpnext/stock/stock_ledger.py:2077 +#: erpnext/stock/stock_ledger.py:2079 msgid "Valuation Rate for the Item {0}, is required to do accounting entries for {1} {2}." msgstr "" @@ -59927,7 +60062,7 @@ msgid "Valuation rate for the item as per Sales Invoice (Only for Internal Trans msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:2292 -#: erpnext/controllers/accounts_controller.py:3304 +#: erpnext/controllers/accounts_controller.py:3340 msgid "Valuation type charges can not be marked as Inclusive" msgstr "" @@ -60057,7 +60192,7 @@ msgstr "" msgid "Variance ({})" msgstr "" -#: erpnext/stock/doctype/item/item.js:241 +#: erpnext/stock/doctype/item/item.js:247 #: erpnext/stock/doctype/item/item_list.js:61 #: erpnext/stock/report/item_variant_details/item_variant_details.py:74 msgid "Variant" @@ -60086,7 +60221,7 @@ msgstr "" msgid "Variant Based On cannot be changed" msgstr "" -#: erpnext/stock/doctype/item/item.js:217 +#: erpnext/stock/doctype/item/item.js:223 msgid "Variant Details Report" msgstr "" @@ -60095,8 +60230,8 @@ msgstr "" msgid "Variant Field" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:390 -#: erpnext/manufacturing/doctype/bom/bom.js:470 +#: erpnext/manufacturing/doctype/bom/bom.js:392 +#: erpnext/manufacturing/doctype/bom/bom.js:472 msgid "Variant Item" msgstr "" @@ -60111,7 +60246,7 @@ msgstr "" msgid "Variant Of" msgstr "" -#: erpnext/stock/doctype/item/item.js:969 +#: erpnext/stock/doctype/item/item.js:978 msgid "Variant creation has been queued." msgstr "" @@ -60416,7 +60551,7 @@ msgid "Volt-Ampere" msgstr "" #: erpnext/accounts/report/purchase_register/purchase_register.py:179 -#: erpnext/accounts/report/sales_register/sales_register.py:193 +#: erpnext/accounts/report/sales_register/sales_register.py:202 msgid "Voucher" msgstr "" @@ -60495,7 +60630,7 @@ msgstr "" #: erpnext/accounts/doctype/repost_accounting_ledger_items/repost_accounting_ledger_items.json #: erpnext/accounts/doctype/repost_payment_ledger_items/repost_payment_ledger_items.json #: erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.json -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1203 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1235 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js:56 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py:221 #: erpnext/accounts/report/general_ledger/general_ledger.js:49 @@ -60569,13 +60704,13 @@ msgstr "" #: erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.json #: erpnext/accounts/doctype/repost_payment_ledger_items/repost_payment_ledger_items.json #: erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.json -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1201 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1233 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py:212 #: erpnext/accounts/report/general_ledger/general_ledger.py:760 #: erpnext/accounts/report/invalid_ledger_entries/invalid_ledger_entries.py:31 #: erpnext/accounts/report/payment_ledger/payment_ledger.py:165 #: erpnext/accounts/report/purchase_register/purchase_register.py:174 -#: erpnext/accounts/report/sales_register/sales_register.py:188 +#: erpnext/accounts/report/sales_register/sales_register.py:197 #: erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.py:17 #: erpnext/public/js/utils/unreconcile.js:71 #: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json @@ -60762,7 +60897,7 @@ msgstr "" msgid "Warehouse and Reference" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:100 +#: erpnext/stock/doctype/warehouse/warehouse.py:120 msgid "Warehouse can not be deleted as stock ledger entry exists for this warehouse." msgstr "" @@ -60778,7 +60913,7 @@ msgstr "" msgid "Warehouse is required to get producible FG Items" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:241 +#: erpnext/stock/doctype/warehouse/warehouse.py:261 msgid "Warehouse not found against the account {0}" msgstr "" @@ -60792,7 +60927,7 @@ msgstr "" msgid "Warehouse wise Item Balance Age and Value" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:94 +#: erpnext/stock/doctype/warehouse/warehouse.py:114 msgid "Warehouse {0} can not be deleted as quantity exists for Item {1}" msgstr "" @@ -60804,16 +60939,16 @@ msgstr "" msgid "Warehouse {0} does not belong to company {1}" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:288 +#: erpnext/stock/doctype/warehouse/warehouse.py:308 #: erpnext/stock/report/stock_qty_vs_serial_no_count/stock_qty_vs_serial_no_count.py:99 msgid "Warehouse {0} does not exist" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:321 +#: erpnext/manufacturing/doctype/work_order/work_order.py:328 msgid "Warehouse {0} is not allowed for Sales Order {1}, it should be {2}" msgstr "" -#: erpnext/controllers/stock_controller.py:875 +#: erpnext/controllers/stock_controller.py:886 msgid "Warehouse {0} is not linked to any account, please mention the account in the warehouse record or set default inventory account in company {1}." msgstr "" @@ -60830,15 +60965,15 @@ msgstr "" msgid "Warehouses" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:147 +#: erpnext/stock/doctype/warehouse/warehouse.py:167 msgid "Warehouses with child nodes cannot be converted to ledger" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:157 +#: erpnext/stock/doctype/warehouse/warehouse.py:177 msgid "Warehouses with existing transaction can not be converted to group." msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:149 +#: erpnext/stock/doctype/warehouse/warehouse.py:169 msgid "Warehouses with existing transaction can not be converted to ledger." msgstr "" @@ -60926,7 +61061,7 @@ msgstr "" msgid "Warning - Row {0}: Billing Hours are more than Actual Hours" msgstr "" -#: erpnext/stock/stock_ledger.py:876 +#: erpnext/stock/stock_ledger.py:878 msgid "Warning on Negative Stock" msgstr "" @@ -60934,7 +61069,7 @@ msgstr "" msgid "Warning!" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:122 +#: erpnext/stock/doctype/warehouse/warehouse.py:142 msgid "Warning: Account changed for warehouse" msgstr "" @@ -60946,11 +61081,11 @@ msgstr "" msgid "Warning: Material Requested Qty is less than Minimum Order Qty" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1630 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1623 msgid "Warning: Quantity exceeds maximum producible quantity based on quantity of raw materials received through the Subcontracting Inward Order {0}." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:349 +#: erpnext/selling/doctype/sales_order/sales_order.py:350 msgid "Warning: Sales Order {0} already exists against Customer's Purchase Order {1}" msgstr "" @@ -61247,7 +61382,7 @@ msgstr "" msgid "When checked, the system will use the posting datetime of the document for naming the document instead of the creation datetime of the document." msgstr "" -#: erpnext/stock/doctype/item/item.js:1303 +#: erpnext/stock/doctype/item/item.js:1312 msgid "When creating an Item, entering a value for this field will automatically create an Item Price at the backend." msgstr "" @@ -61262,7 +61397,7 @@ msgstr "" msgid "When enabled, transactions with this supplier will be blocked based on the Hold Type below" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:417 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:422 msgid "When there are multiple finished goods ({0}) in a Repack stock entry, the basic rate for all finished goods must be set manually. To set rate manually, enable the checkbox 'Set Basic Rate Manually' in the respective finished good row." msgstr "" @@ -61501,7 +61636,7 @@ msgstr "" msgid "Work Order Item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1036 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1041 msgid "Work Order Mismatch" msgstr "" @@ -61546,12 +61681,12 @@ msgstr "" msgid "Work Order cannot be created for following reason:
    {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1574 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1567 msgid "Work Order cannot be raised against a Item Template" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2779 -#: erpnext/manufacturing/doctype/work_order/work_order.py:2859 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2771 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2852 msgid "Work Order has been {0}" msgstr "" @@ -61559,15 +61694,15 @@ msgstr "" msgid "Work Order not created" msgstr "" -#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:1392 +#: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:1413 msgid "Work Order {0} created" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2772 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2846 msgid "Work Order {0} has no produced qty" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1160 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1165 msgid "Work Order {0}: Job Card not found for the operation {1}" msgstr "" @@ -61597,7 +61732,7 @@ msgstr "" msgid "Work-in-Progress Warehouse" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:922 +#: erpnext/manufacturing/doctype/work_order/work_order.py:915 msgid "Work-in-Progress Warehouse is required before Submit" msgstr "" @@ -61626,7 +61761,7 @@ msgstr "" #. Label of the support_and_resolution (Table) field in DocType 'Service Level #. Agreement' #: erpnext/manufacturing/doctype/workstation/workstation.json -#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:65 +#: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:74 #: erpnext/projects/workspace/projects/projects.json #: erpnext/support/doctype/service_level_agreement/service_level_agreement.json msgid "Working Hours" @@ -61719,7 +61854,7 @@ msgstr "" msgid "Workstation Working Hour" msgstr "" -#: erpnext/manufacturing/doctype/workstation/workstation.py:464 +#: erpnext/manufacturing/doctype/workstation/workstation.py:463 msgid "Workstation is closed on the following dates as per Holiday List: {0}" msgstr "" @@ -61742,7 +61877,7 @@ msgstr "" #: erpnext/accounts/doctype/pos_profile/pos_profile.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/setup/doctype/company/company.py:670 +#: erpnext/setup/doctype/company/company.py:671 msgid "Write Off" msgstr "" @@ -61895,7 +62030,7 @@ msgstr "" msgid "You are importing data for the code list:" msgstr "" -#: erpnext/controllers/accounts_controller.py:3959 +#: erpnext/controllers/accounts_controller.py:3995 msgid "You are not allowed to update as per the conditions set in {} Workflow." msgstr "" @@ -61911,7 +62046,7 @@ msgstr "" msgid "You are not authorized to set Frozen value" msgstr "" -#: erpnext/projects/doctype/task/task.py:317 +#: erpnext/projects/doctype/task/task.py:333 msgid "You are not permitted to create a Task for Project {0}" msgstr "" @@ -61976,7 +62111,7 @@ msgstr "" msgid "You can use {0} to reconcile against {1} later." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1391 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1509 msgid "You can't make any changes to Job Card since Work Order is closed." msgstr "" @@ -61988,7 +62123,7 @@ msgstr "" msgid "You can't redeem Loyalty Points having more value than the Total Amount." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:780 +#: erpnext/manufacturing/doctype/bom/bom.js:782 msgid "You cannot change the rate if BOM is mentioned against any Item." msgstr "" @@ -62016,7 +62151,7 @@ msgstr "" msgid "You cannot edit root node." msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:204 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:205 msgid "You cannot enable both the settings '{0}' and '{1}'." msgstr "" @@ -62061,7 +62196,7 @@ msgstr "" msgid "You do not have permission to import bank transactions" msgstr "" -#: erpnext/controllers/accounts_controller.py:3937 +#: erpnext/controllers/accounts_controller.py:3973 msgid "You do not have permissions to {} items in a {}." msgstr "" @@ -62073,11 +62208,11 @@ msgstr "" msgid "You don't have enough points to redeem." msgstr "" -#: erpnext/controllers/accounts_controller.py:4505 +#: erpnext/controllers/accounts_controller.py:4541 msgid "You don't have permission to create a Company Address. Please contact your System Manager." msgstr "" -#: erpnext/controllers/accounts_controller.py:4485 +#: erpnext/controllers/accounts_controller.py:4521 msgid "You don't have permission to update Company details. Please contact your System Manager." msgstr "" @@ -62085,7 +62220,7 @@ msgstr "" msgid "You don't have permission to update Received Qty DocField for item {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:4479 +#: erpnext/controllers/accounts_controller.py:4515 msgid "You don't have permission to update this document. Please contact your System Manager." msgstr "" @@ -62109,7 +62244,7 @@ msgstr "" msgid "You have enabled {0} and {1} in {2}. This can lead to prices from the default price list being inserted into the transaction price list." msgstr "" -#: erpnext/stock/doctype/shipment/shipment.js:442 +#: erpnext/stock/doctype/shipment/shipment.js:445 msgid "You have entered a duplicate Delivery Note on Row" msgstr "" @@ -62121,7 +62256,7 @@ msgstr "" msgid "You have not performed any reconciliations in this session yet." msgstr "" -#: erpnext/stock/doctype/item/item.py:1197 +#: erpnext/stock/doctype/item/item.py:1200 msgid "You have to enable auto re-order in Stock Settings to maintain re-order levels." msgstr "" @@ -62141,7 +62276,7 @@ msgstr "" msgid "You need to cancel POS Closing Entry {} to be able to cancel this document." msgstr "" -#: erpnext/controllers/accounts_controller.py:3255 +#: erpnext/controllers/accounts_controller.py:3291 msgid "You selected the account group {1} as {2} Account in row {0}. Please select a single account." msgstr "" @@ -62201,7 +62336,7 @@ msgstr "" msgid "Zero Rated" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:747 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:752 msgid "Zero quantity" msgstr "" @@ -62227,7 +62362,7 @@ msgstr "" msgid "`Allow Negative rates for Items`" msgstr "" -#: erpnext/stock/stock_ledger.py:2091 +#: erpnext/stock/stock_ledger.py:2093 msgid "after" msgstr "" @@ -62243,7 +62378,7 @@ msgstr "" msgid "as Title" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.js:1030 +#: erpnext/manufacturing/doctype/bom/bom.js:1032 msgid "as a percentage of finished item quantity" msgstr "" @@ -62267,7 +62402,7 @@ msgstr "" msgid "cannot be greater than 100" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:351 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:391 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1158 msgid "dated {0}" msgstr "" @@ -62419,7 +62554,7 @@ msgstr "" msgid "per hour" msgstr "" -#: erpnext/stock/stock_ledger.py:2092 +#: erpnext/stock/stock_ledger.py:2094 msgid "performing either one below:" msgstr "" @@ -62563,7 +62698,7 @@ msgstr "" msgid "you must select Capital Work in Progress Account in accounts table" msgstr "" -#: erpnext/controllers/accounts_controller.py:1318 +#: erpnext/controllers/accounts_controller.py:1354 msgid "{0} '{1}' is disabled" msgstr "" @@ -62571,7 +62706,7 @@ msgstr "" msgid "{0} '{1}' not in Fiscal Year {2}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:808 +#: erpnext/manufacturing/doctype/work_order/work_order.py:798 msgid "{0} ({1}) cannot be greater than planned quantity ({2}) in Work Order {3}" msgstr "" @@ -62579,7 +62714,7 @@ msgstr "" msgid "{0} {1} has submitted Assets. Remove Item {2} from table to continue." msgstr "" -#: erpnext/controllers/accounts_controller.py:2415 +#: erpnext/controllers/accounts_controller.py:2451 msgid "{0} Account not found against Customer {1}." msgstr "" @@ -62607,7 +62742,7 @@ msgstr "" msgid "{0} Number {1} is already used in {2} {3}" msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:1694 +#: erpnext/manufacturing/doctype/bom/bom.py:1717 msgid "{0} Operating Cost for operation {1}" msgstr "" @@ -62635,7 +62770,7 @@ msgstr "" msgid "{0} account is not of type {1}" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:491 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:492 msgid "{0} account not found while submitting purchase receipt" msgstr "" @@ -62709,7 +62844,7 @@ msgstr "" msgid "{0} currently has a {1} Supplier Scorecard standing, and Purchase Orders to this supplier should be issued with caution." msgstr "" -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:141 +#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:147 msgid "{0} currently has a {1} Supplier Scorecard standing, and RFQs to this supplier should be issued with caution." msgstr "" @@ -62717,7 +62852,7 @@ msgstr "" msgid "{0} does not belong to Company {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:377 +#: erpnext/controllers/accounts_controller.py:396 msgid "{0} does not belong to the Company {1}." msgstr "" @@ -62759,7 +62894,7 @@ msgstr "" msgid "{0} hours" msgstr "" -#: erpnext/controllers/accounts_controller.py:2775 +#: erpnext/controllers/accounts_controller.py:2811 msgid "{0} in row {1}" msgstr "" @@ -62785,6 +62920,10 @@ msgstr "" msgid "{0} is added multiple times on rows: {1}" msgstr "" +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1788 +msgid "{0} is already a Reverse Journal Entry of {1}. Cancel it instead of reversing it." +msgstr "" + #: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:639 msgid "{0} is already running for {1}" msgstr "" @@ -62814,15 +62953,15 @@ msgstr "" msgid "{0} is mandatory for account {1}" msgstr "" -#: erpnext/public/js/controllers/taxes_and_totals.js:132 +#: erpnext/public/js/controllers/taxes_and_totals.js:137 msgid "{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}" msgstr "" -#: erpnext/controllers/accounts_controller.py:3212 +#: erpnext/controllers/accounts_controller.py:3248 msgid "{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}." msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1929 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1932 msgid "{0} is not a CSV file." msgstr "" @@ -62834,7 +62973,7 @@ msgstr "" msgid "{0} is not a group node. Please select a group node as parent cost center" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:799 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:804 msgid "{0} is not a stock Item" msgstr "" @@ -62914,7 +63053,7 @@ msgstr "" msgid "{0} not allowed to transact with {1}. Please change the Company or add the Company in the 'Allowed To Transact With'-Section in the Customer record." msgstr "" -#: erpnext/manufacturing/doctype/bom/bom.py:612 +#: erpnext/manufacturing/doctype/bom/bom.py:640 msgid "{0} not found for item {1}" msgstr "" @@ -62926,7 +63065,7 @@ msgstr "" msgid "{0} payment entries can not be filtered by {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:1917 +#: erpnext/controllers/stock_controller.py:1928 msgid "{0} qty of Item {1} is being received into Warehouse {2} with capacity {3}." msgstr "" @@ -62955,16 +63094,16 @@ msgstr "" msgid "{0} units of {1} are required in {2} with the inventory dimension: {3} on {4} {5} for {6} to complete the transaction." msgstr "" -#: erpnext/stock/stock_ledger.py:1744 erpnext/stock/stock_ledger.py:2259 -#: erpnext/stock/stock_ledger.py:2273 +#: erpnext/stock/stock_ledger.py:1746 erpnext/stock/stock_ledger.py:2261 +#: erpnext/stock/stock_ledger.py:2275 msgid "{0} units of {1} needed in {2} on {3} {4} for {5} to complete this transaction." msgstr "" -#: erpnext/stock/stock_ledger.py:2360 erpnext/stock/stock_ledger.py:2405 +#: erpnext/stock/stock_ledger.py:2362 erpnext/stock/stock_ledger.py:2407 msgid "{0} units of {1} needed in {2} on {3} {4} to complete this transaction." msgstr "" -#: erpnext/stock/stock_ledger.py:1738 +#: erpnext/stock/stock_ledger.py:1740 msgid "{0} units of {1} needed in {2} to complete this transaction." msgstr "" @@ -62976,7 +63115,7 @@ msgstr "" msgid "{0} valid serial nos for Item {1}" msgstr "" -#: erpnext/stock/doctype/item/item.js:974 +#: erpnext/stock/doctype/item/item.js:983 msgid "{0} variants created." msgstr "" @@ -62996,11 +63135,11 @@ msgstr "" msgid "{0} will be set as the {1} in subsequently scanned items" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1037 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1043 msgid "{0} {1}" msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:265 +#: erpnext/public/js/utils/serial_no_batch_selector.js:275 msgid "{0} {1} Manually" msgstr "" @@ -63035,7 +63174,7 @@ msgid "{0} {1} has already been partly paid. Please use the 'Get Outstanding Inv msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order.py:426 -#: erpnext/selling/doctype/sales_order/sales_order.py:600 +#: erpnext/selling/doctype/sales_order/sales_order.py:601 #: erpnext/stock/doctype/material_request/material_request.py:306 msgid "{0} {1} has been modified. Please refresh." msgstr "" @@ -63126,7 +63265,7 @@ msgstr "" msgid "{0} {1} status is {2}." msgstr "" -#: erpnext/public/js/utils/serial_no_batch_selector.js:241 +#: erpnext/public/js/utils/serial_no_batch_selector.js:251 msgid "{0} {1} via CSV File" msgstr "" @@ -63153,7 +63292,7 @@ msgstr "" msgid "{0} {1}: Accounting Entry for {2} can only be made in currency: {3}" msgstr "" -#: erpnext/controllers/stock_controller.py:1087 +#: erpnext/controllers/stock_controller.py:1098 msgid "{0} {1}: Cost Center is mandatory for Item {2}" msgstr "" @@ -63198,12 +63337,16 @@ msgstr "" msgid "{0}% of total invoice value will be given as discount." msgstr "" -#: erpnext/projects/doctype/task/task.py:131 +#: erpnext/projects/doctype/task/task.py:137 msgid "{0}'s {1} cannot be after {2}'s Expected End Date." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1363 -#: erpnext/manufacturing/doctype/job_card/job_card.py:1371 +#: erpnext/projects/doctype/task/task.py:147 +msgid "{0}'s {1} cannot be before {2}'s Expected Start Date." +msgstr "" + +#: erpnext/manufacturing/doctype/job_card/job_card.py:1400 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1408 msgid "{0}, complete the operation {1} before the operation {2}." msgstr "" @@ -63227,19 +63370,19 @@ msgstr "" msgid "{0}: Virtual DocType (no database table)" msgstr "" -#: erpnext/stock/doctype/item/item.js:890 +#: erpnext/stock/doctype/item/item.js:899 msgid "{0}: remove invalid value(s) {1}" msgstr "" -#: erpnext/stock/doctype/item/item.js:897 +#: erpnext/stock/doctype/item/item.js:906 msgid "{0}: select the typed value {1} from the list or clear it" msgstr "" -#: erpnext/controllers/accounts_controller.py:567 +#: erpnext/controllers/accounts_controller.py:586 msgid "{0}: {1} does not belong to the Company: {2}" msgstr "" -#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1364 +#: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1396 msgid "{0}: {1} does not exist" msgstr "" @@ -63251,11 +63394,11 @@ msgstr "" msgid "{0}: {1} must be less than {2}" msgstr "" -#: erpnext/controllers/buying_controller.py:1101 +#: erpnext/controllers/buying_controller.py:1109 msgid "{count} Assets created for {item_code}" msgstr "" -#: erpnext/controllers/buying_controller.py:999 +#: erpnext/controllers/buying_controller.py:1007 msgid "{doctype} {name} is cancelled or closed." msgstr "" @@ -63263,11 +63406,11 @@ msgstr "" msgid "{field_label} is mandatory for sub-contracted {doctype}." msgstr "" -#: erpnext/controllers/stock_controller.py:2383 +#: erpnext/controllers/stock_controller.py:2394 msgid "{item_name}'s Sample Size ({sample_size}) cannot be greater than the Accepted Quantity ({accepted_quantity})" msgstr "" -#: erpnext/controllers/stock_controller.py:2146 +#: erpnext/controllers/stock_controller.py:2157 msgid "{ref_doctype} {ref_name} status is {status}." msgstr "" diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index 7a002da2fac..17e9e2caeec 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -309,7 +309,9 @@ frappe.ui.form.on("BOM", { frm.set_intro( __("This is a Template BOM and will be used to make the work order for {0} of the item {1}", [ `variants`, - `${frm.doc.item}`, + `${frappe.utils.escape_html( + frm.doc.item + )}`, ]), true ); diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index aa010590bc5..d90c57b8b7c 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -372,7 +372,7 @@ class BOM(WebsiteGenerator): if item.process_loss_per >= 100: frappe.throw( _("Row #{0}: Process Loss Percentage should be less than 100% for {1} Item {2}").format( - item.idx, item.type, get_link_to_form("Item", item.item_code) + item.idx, item.secondary_item_type, get_link_to_form("Item", item.item_code) ) ) @@ -1297,7 +1297,9 @@ class BOM(WebsiteGenerator): frappe.throw(msg, title=_("Invalid Process Loss Configuration")) def has_scrap_items(self): - return any(d.get("type") == "Scrap" or d.get("is_legacy") for d in self.get("secondary_items")) + return any( + d.get("secondary_item_type") == "Scrap" or d.get("is_legacy") for d in self.get("secondary_items") + ) def get_bom_item_rate(args, bom_doc): @@ -1465,7 +1467,7 @@ def get_bom_items_as_dict( query = query.format( table="BOM Secondary Item", where_conditions=")", - select_columns=", item.description, bom_item.cost_allocation_per, bom_item.process_loss_per, bom_item.type, bom_item.name, bom_item.is_legacy", + select_columns=", item.description, bom_item.cost_allocation_per, bom_item.process_loss_per, bom_item.secondary_item_type, bom_item.name, bom_item.is_legacy", is_stock_item=is_stock_item, qty_field="stock_qty", group_by_cond=group_by_cond, diff --git a/erpnext/manufacturing/doctype/bom/bom_item_preview.html b/erpnext/manufacturing/doctype/bom/bom_item_preview.html index 06dd4365c67..d3c308bbd8e 100644 --- a/erpnext/manufacturing/doctype/bom/bom_item_preview.html +++ b/erpnext/manufacturing/doctype/bom/bom_item_preview.html @@ -20,11 +20,11 @@

    {% if data.value && data.value != "BOM" %} - + {{ __("Open BOM {0}", [data.value.bold()]) }} {% endif %} {% if data.item_code %} - + {{ __("Open Item {0}", [data.item_code.bold()]) }} {% endif %}

    diff --git a/erpnext/manufacturing/doctype/bom/test_records.json b/erpnext/manufacturing/doctype/bom/test_records.json index 7c5c41fec19..2386fd0f38b 100644 --- a/erpnext/manufacturing/doctype/bom/test_records.json +++ b/erpnext/manufacturing/doctype/bom/test_records.json @@ -45,7 +45,7 @@ "stock_qty": 1.0, "rate": 2000.0, "stock_uom": "_Test UOM", - "type": "Scrap", + "secondary_item_type": "Scrap", "is_legacy": 1 } ], diff --git a/erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.json b/erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.json index a76be016de7..cc7e5e61bb7 100644 --- a/erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.json +++ b/erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.json @@ -6,7 +6,7 @@ "editable_grid": 1, "engine": "InnoDB", "field_order": [ - "type", + "secondary_item_type", "rate", "column_break_gres", "is_legacy", @@ -35,7 +35,7 @@ "fields": [ { "depends_on": "eval:!doc.is_legacy", - "fieldname": "type", + "fieldname": "secondary_item_type", "fieldtype": "Select", "in_list_view": 1, "label": "Type", diff --git a/erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.py b/erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.py index 87748fe2269..577eb0bd6e2 100644 --- a/erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.py +++ b/erpnext/manufacturing/doctype/bom_secondary_item/bom_secondary_item.py @@ -32,7 +32,7 @@ class BOMSecondaryItem(Document): rate: DF.Currency stock_qty: DF.Float stock_uom: DF.Link | None - type: DF.Literal["", "Co-Product", "By-Product", "Scrap", "Additional Finished Good"] + secondary_item_type: DF.Literal["", "Co-Product", "By-Product", "Scrap", "Additional Finished Good"] uom: DF.Link # end: auto-generated types diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py index 0e05bfb18a8..dbbb2e07f36 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.py +++ b/erpnext/manufacturing/doctype/job_card/job_card.py @@ -150,6 +150,8 @@ class JobCard(Document): self.set_onload("job_card_excess_transfer", excess_transfer) self.set_onload("work_order_closed", self.is_work_order_closed()) self.set_onload("has_stock_entry", self.has_stock_entry()) + if self.docstatus == 0: + self.set_onload("max_completable_qty", self.get_max_completable_qty()) def on_discard(self): self.db_set("status", "Cancelled") @@ -297,7 +299,7 @@ class JobCard(Document): "stock_qty": values.qty, "item_name": values.item_name, "stock_uom": values.stock_uom, - "type": values.type, + "secondary_item_type": values.secondary_item_type, "bom_secondary_item": values.name, } @@ -1374,12 +1376,7 @@ class JobCard(Document): current_operation_qty += flt(self.total_completed_qty) - previous_operations = frappe.get_all( - "Work Order Operation", - fields=["name", "operation", "status", "completed_qty", "sequence_id", "finished_good"], - filters={"docstatus": 1, "parent": self.work_order, "sequence_id": ("<", self.sequence_id)}, - order_by="sequence_id, idx", - ) + previous_operations = self.get_previous_operations() message = "Job Card {}: As per the sequence of the operations in the work order {}".format( bold(self.name), bold(get_link_to_form("Work Order", self.work_order)) @@ -1443,6 +1440,41 @@ class JobCard(Document): return dict(data) + def get_previous_operations(self): + return frappe.get_all( + "Work Order Operation", + fields=["name", "operation", "status", "completed_qty", "sequence_id", "finished_good"], + filters={"docstatus": 1, "parent": self.work_order, "sequence_id": ("<", self.sequence_id)}, + order_by="sequence_id, idx", + ) + + def get_current_operation_completed_qty(self): + current_operation_qty = 0.0 + data = self.get_current_operation_data() + if data and len(data) > 0: + current_operation_qty = flt(data[0].completed_qty) + + return current_operation_qty + flt(self.total_completed_qty) + + def get_max_completable_qty(self): + if self.is_corrective_job_card or not (self.work_order and self.sequence_id): + return None + + previous_operations = self.get_previous_operations() + if not previous_operations: + return None + + if self.track_semi_finished_goods: + totals = self.get_manufactured_qty_per_operation([row.name for row in previous_operations]) + for row in previous_operations: + row.manufactured_qty = flt(totals.get(row.name)) + + qty_field = "manufactured_qty" if self.track_semi_finished_goods else "completed_qty" + min_completed_qty = min(flt(row.get(qty_field)) for row in previous_operations) + + precision = self.precision("total_completed_qty") + return flt(min_completed_qty - self.get_current_operation_completed_qty(), precision) + def validate_previous_operation_manufactured_qty(self, row, current_operation_qty): manufactured_qty = flt(row.manufactured_qty) @@ -1725,7 +1757,7 @@ class JobCard(Document): ste.stock_entry.pro_doc = frappe.get_doc("Work Order", self.work_order) ste.stock_entry.set_secondary_items_from_job_card() for row in ste.stock_entry.items: - if (row.type or row.is_legacy_scrap_item) and not row.t_warehouse: + if (row.secondary_item_type or row.is_legacy_scrap_item) and not row.t_warehouse: row.t_warehouse = self.target_warehouse if auto_submit: diff --git a/erpnext/manufacturing/doctype/job_card/test_job_card.py b/erpnext/manufacturing/doctype/job_card/test_job_card.py index c12710318bd..d93037d3e55 100644 --- a/erpnext/manufacturing/doctype/job_card/test_job_card.py +++ b/erpnext/manufacturing/doctype/job_card/test_job_card.py @@ -915,6 +915,146 @@ class TestJobCard(ERPNextTestSuite): self.assertEqual(wo_doc.process_loss_qty, 2) self.assertEqual(wo_doc.status, "Completed") + def make_two_operation_work_order(self, qty=10): + from erpnext.manufacturing.doctype.routing.test_routing import ( + create_routing, + setup_bom, + setup_operations, + ) + from erpnext.stock.doctype.item.test_item import make_item + from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse + + operations = [ + {"operation": "Test Operation A1", "workstation": "Test Workstation A", "time_in_mins": 30}, + {"operation": "Test Operation B1", "workstation": "Test Workstation A", "time_in_mins": 20}, + ] + + warehouse = create_warehouse("Test Warehouse 123 for Job Card") + setup_operations(operations) + + item_code = "Test Job Card Process Qty Item" + for item in [item_code, item_code + "RM 1", item_code + "RM 2"]: + if not frappe.db.exists("Item", item): + make_item(item, {"item_name": item, "stock_uom": "Nos", "is_stock_item": 1}) + + routing_doc = create_routing(routing_name="Testing Route", operations=operations) + bom_doc = setup_bom( + item_code=item_code, + routing=routing_doc.name, + raw_materials=[item_code + "RM 1", item_code + "RM 2"], + source_warehouse=warehouse, + ) + + for row in bom_doc.items: + make_stock_entry(item_code=row.item_code, target=row.source_warehouse, qty=qty, basic_rate=100) + + return make_wo_order_test_record( + production_item=item_code, + bom_no=bom_doc.name, + qty=qty, + skip_transfer=1, + wip_warehouse=warehouse, + source_warehouse=warehouse, + ) + + def test_completion_qty_capped_by_previous_operation(self): + wo_doc = self.make_two_operation_work_order() + job_cards = frappe.get_all( + "Job Card", + filters={"work_order": wo_doc.name}, + fields=["name", "sequence_id"], + order_by="sequence_id", + ) + + jc1 = frappe.get_doc("Job Card", job_cards[0].name) + self.assertIsNone(jc1.get_max_completable_qty()) + + jc1.append( + "time_logs", + {"from_time": now(), "to_time": add_to_date(now(), minutes=30), "completed_qty": 8}, + ) + jc1.save() + jc1.submit() + self.assertEqual(jc1.process_loss_qty, 2) + + jc2 = frappe.get_doc("Job Card", job_cards[1].name) + self.assertEqual(jc2.get_max_completable_qty(), 8) + + jc2.append("time_logs", {"from_time": add_to_date(now(), minutes=40)}) + jc2.save() + + self.assertRaises( + frappe.ValidationError, + jc2.complete_job_card, + qty=10, + for_quantity=10, + pending_qty=0, + process_loss_qty=0, + end_time=add_to_date(now(), minutes=70), + ) + + self.complete_second_operation_and_finish(wo_doc, jc2.name) + + def complete_second_operation_and_finish(self, wo_doc, job_card): + from erpnext.manufacturing.doctype.work_order.work_order import ( + make_stock_entry as make_stock_entry_for_wo, + ) + + jc2 = frappe.get_doc("Job Card", job_card) + jc2.time_logs[0].completed_qty = 7 + jc2.time_logs[0].to_time = add_to_date(now(), minutes=70) + jc2.save() + self.assertEqual(jc2.process_loss_qty, 3) + jc2.submit() + + se = frappe.get_doc(make_stock_entry_for_wo(wo_doc.name, "Manufacture", 10)) + se.submit() + + self.assertEqual(se.process_loss_qty, 3) + fg_qty = sum(d.qty for d in se.items if d.is_finished_item) + self.assertEqual(flt(fg_qty), 7) + + wo_doc.reload() + self.assertEqual(wo_doc.produced_qty, 7) + self.assertEqual(wo_doc.process_loss_qty, 3) + self.assertEqual(wo_doc.status, "Completed") + + def test_process_loss_booked_once_across_partial_entries(self): + from erpnext.manufacturing.doctype.work_order.work_order import ( + make_stock_entry as make_stock_entry_for_wo, + ) + + wo_doc = self.make_two_operation_work_order() + job_cards = frappe.get_all( + "Job Card", filters={"work_order": wo_doc.name}, fields=["name"], order_by="sequence_id" + ) + + for index, row in enumerate(job_cards): + jc = frappe.get_doc("Job Card", row.name) + from_time = add_to_date(now(), minutes=index * 40) + jc.append( + "time_logs", + {"from_time": from_time, "to_time": add_to_date(from_time, minutes=30), "completed_qty": 7}, + ) + jc.save() + jc.submit() + self.assertEqual(jc.process_loss_qty, 3) + + se1 = frappe.get_doc(make_stock_entry_for_wo(wo_doc.name, "Manufacture", 5)) + se1.submit() + self.assertEqual(se1.process_loss_qty, 3) + self.assertEqual(flt(sum(d.qty for d in se1.items if d.is_finished_item)), 2) + + se2 = frappe.get_doc(make_stock_entry_for_wo(wo_doc.name, "Manufacture", 5)) + se2.submit() + self.assertEqual(flt(se2.process_loss_qty), 0) + self.assertEqual(flt(sum(d.qty for d in se2.items if d.is_finished_item)), 5) + + wo_doc.reload() + self.assertEqual(wo_doc.process_loss_qty, 3) + self.assertEqual(wo_doc.produced_qty, 7) + self.assertEqual(wo_doc.status, "Completed") + def get_first_job_card(self, work_order): return frappe.get_doc( "Job Card", @@ -1163,7 +1303,7 @@ class TestJobCard(ERPNextTestSuite): "qty": 1, "process_loss_per": 10, "cost_allocation_per": 5, - "type": "Scrap", + "secondary_item_type": "Scrap", }, ) if submit: @@ -1246,7 +1386,8 @@ class TestJobCard(ERPNextTestSuite): }, ) job_card.append( - "secondary_items", {"item_code": scrap_extra.name, "stock_qty": 5, "type": "Co-Product"} + "secondary_items", + {"item_code": scrap_extra.name, "stock_qty": 5, "secondary_item_type": "Co-Product"}, ) job_card.submit() @@ -1265,7 +1406,7 @@ class TestJobCard(ERPNextTestSuite): self.assertEqual(manufacturing_entry.items[2].qty, 9) self.assertEqual(flt(manufacturing_entry.items[2].basic_rate, 3), 5.556) self.assertEqual(manufacturing_entry.items[3].item_code, scrap_extra.name) - self.assertEqual(manufacturing_entry.items[3].type, "Co-Product") + self.assertEqual(manufacturing_entry.items[3].secondary_item_type, "Co-Product") self.assertEqual(manufacturing_entry.items[3].qty, 5) self.assertEqual(manufacturing_entry.items[3].basic_rate, 0) @@ -2429,7 +2570,9 @@ class TestJobCard(ERPNextTestSuite): ) job_card = frappe.get_last_doc("Job Card", {"work_order": self.work_order.name}) - job_card.append("secondary_items", {"item_code": "_Test Item", "stock_qty": 2, "type": "Scrap"}) + job_card.append( + "secondary_items", {"item_code": "_Test Item", "stock_qty": 2, "secondary_item_type": "Scrap"} + ) job_card.append( "time_logs", { diff --git a/erpnext/manufacturing/doctype/job_card_secondary_item/job_card_secondary_item.json b/erpnext/manufacturing/doctype/job_card_secondary_item/job_card_secondary_item.json index d9ac0e08ced..d367d7e308c 100644 --- a/erpnext/manufacturing/doctype/job_card_secondary_item/job_card_secondary_item.json +++ b/erpnext/manufacturing/doctype/job_card_secondary_item/job_card_secondary_item.json @@ -5,7 +5,7 @@ "editable_grid": 1, "engine": "InnoDB", "field_order": [ - "type", + "secondary_item_type", "description", "column_break_3", "item_code", @@ -69,7 +69,7 @@ "read_only": 1 }, { - "fieldname": "type", + "fieldname": "secondary_item_type", "fieldtype": "Select", "in_list_view": 1, "label": "Type", @@ -87,7 +87,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2026-03-06 13:51:00.492621", + "modified": "2026-06-01 10:00:00.000000", "modified_by": "Administrator", "module": "Manufacturing", "name": "Job Card Secondary Item", diff --git a/erpnext/manufacturing/doctype/job_card_secondary_item/job_card_secondary_item.py b/erpnext/manufacturing/doctype/job_card_secondary_item/job_card_secondary_item.py index 3a71ab9d755..db61f3cad48 100644 --- a/erpnext/manufacturing/doctype/job_card_secondary_item/job_card_secondary_item.py +++ b/erpnext/manufacturing/doctype/job_card_secondary_item/job_card_secondary_item.py @@ -22,7 +22,7 @@ class JobCardSecondaryItem(Document): parenttype: DF.Data stock_qty: DF.Float stock_uom: DF.Link | None - type: DF.Literal["Co-Product", "By-Product", "Scrap", "Additional Finished Good"] + secondary_item_type: DF.Literal["Co-Product", "By-Product", "Scrap", "Additional Finished Good"] # end: auto-generated types pass diff --git a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py index 4c72c68f69f..8fcab9eefca 100644 --- a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py @@ -3226,7 +3226,7 @@ def make_bom(**args): bom.append( "secondary_items", { - "type": "Scrap", + "secondary_item_type": "Scrap", "item_code": item, "item_name": item, "uom": item_doc.stock_uom, diff --git a/erpnext/manufacturing/doctype/work_order/services/__init__.py b/erpnext/manufacturing/doctype/work_order/services/__init__.py new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/erpnext/manufacturing/doctype/work_order/services/__init__.py @@ -0,0 +1 @@ + diff --git a/erpnext/manufacturing/doctype/work_order/services/material_coverage.py b/erpnext/manufacturing/doctype/work_order/services/material_coverage.py new file mode 100644 index 00000000000..8363e0c1284 --- /dev/null +++ b/erpnext/manufacturing/doctype/work_order/services/material_coverage.py @@ -0,0 +1,22 @@ +# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from collections.abc import Mapping + +from frappe.utils import flt + + +def get_minimum_material_coverage_fraction( + required_qty: Mapping[str, float], transferred_qty: Mapping[str, float], precision: int +) -> float: + """Return the least-covered component ratio at the configured quantity precision.""" + coverage = [] + for item_code, required in required_qty.items(): + transferred = flt(transferred_qty.get(item_code)) + # Stored values can differ after the digits that the user can enter or see. + if flt(transferred, precision) == flt(required, precision): + coverage.append(1.0) + else: + coverage.append(transferred / required) + + return min(coverage, default=0.0) diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py index 18bd6ff7998..534701faf33 100644 --- a/erpnext/manufacturing/doctype/work_order/test_work_order.py +++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py @@ -1115,7 +1115,7 @@ class TestWorkOrder(ERPNextTestSuite): stock_entry = frappe.get_doc(make_stock_entry(wo_order.name, "Manufacture", 10)) for row in stock_entry.items: - if row.type or row.is_legacy_scrap_item: + if row.secondary_item_type or row.is_legacy_scrap_item: self.assertEqual(row.qty, 1) # Partial Job Card 1 with qty 10 @@ -1127,7 +1127,7 @@ class TestWorkOrder(ERPNextTestSuite): stock_entry = frappe.get_doc(make_stock_entry(wo_order.name, "Manufacture", 10)) for row in stock_entry.items: - if row.type or row.is_legacy_scrap_item: + if row.secondary_item_type or row.is_legacy_scrap_item: self.assertEqual(row.qty, 2) # Partial Job Card 2 with qty 10 @@ -1464,9 +1464,11 @@ class TestWorkOrder(ERPNextTestSuite): del transfer_entry.get("items")[0] # transfer only one RM transfer_entry.submit() - # WO's "Material Transferred for Mfg" shows all is transferred, one RM is pending + # One required item is still missing, so no finished-good quantity is covered yet. work_order.reload() - self.assertEqual(work_order.material_transferred_for_manufacturing, 1) + self.assertEqual(transfer_entry.fg_completed_qty, 0) + self.assertEqual(work_order.material_transferred_for_manufacturing, 0) + self.assertEqual(work_order.status, "In Process") self.assertEqual(work_order.required_items[0].transferred_qty, 0) self.assertEqual(work_order.required_items[1].transferred_qty, 2) @@ -1486,6 +1488,47 @@ class TestWorkOrder(ERPNextTestSuite): self.assertEqual(work_order.required_items[0].transferred_qty, 1) self.assertEqual(work_order.required_items[1].transferred_qty, 2) + def test_material_transfer_claim_follows_actual_coverage(self): + work_order = make_wo_order_test_record(planned_start_date=now(), qty=4) + test_stock_entry.make_stock_entry( + item_code="_Test Item", target="_Test Warehouse - _TC", qty=10, basic_rate=5000.0 + ) + test_stock_entry.make_stock_entry( + item_code="_Test Item Home Desktop 100", + target="_Test Warehouse - _TC", + qty=20, + basic_rate=1000.0, + ) + + transfer_entry = frappe.get_doc( + make_stock_entry(work_order.name, "Material Transfer for Manufacture", 4) + ) + for row in transfer_entry.items: + if row.item_code == "_Test Item": + row.qty = 1 + transfer_entry.submit() + + work_order.reload() + self.assertEqual(transfer_entry.fg_completed_qty, 1) + self.assertEqual(work_order.material_transferred_for_manufacturing, 1) + + remainder_entry = frappe.get_doc( + make_stock_entry(work_order.name, "Material Transfer for Manufacture", 3) + ) + remainder_entry.submit() + + work_order.reload() + self.assertEqual(remainder_entry.fg_completed_qty, 3) + self.assertEqual(work_order.material_transferred_for_manufacturing, 4) + + def test_material_coverage_cap_skips_manufacture_entry(self): + work_order = make_wo_order_test_record(planned_start_date=now(), qty=1) + manufacture_entry = frappe.get_doc(make_stock_entry(work_order.name, "Manufacture", 1)) + manufacture_entry.pro_doc = work_order + manufacture_entry._action = "submit" + + self.assertFalse(manufacture_entry._should_cap_completed_qty()) + def test_material_transferred_min_fraction_on_partial_pick_list(self): """Pick-list flow (fg_completed_qty = 0): 'Material Transferred for Manufacturing' must reflect the least-transferred required item (the bottleneck), instead of being @@ -1548,6 +1591,97 @@ class TestWorkOrder(ERPNextTestSuite): work_order.reload() self.assertEqual(work_order.material_transferred_for_manufacturing, 2.0) + def test_material_transferred_ignores_hidden_precision_difference(self): + work_order = make_wo_order_test_record(planned_start_date=now(), qty=2) + test_stock_entry.make_stock_entry( + item_code="_Test Item", target="_Test Warehouse - _TC", qty=10, basic_rate=5000.0 + ) + test_stock_entry.make_stock_entry( + item_code="_Test Item Home Desktop 100", + target="_Test Warehouse - _TC", + qty=10, + basic_rate=1000.0, + ) + + precision = work_order.precision("required_qty", "required_items") + hidden_difference = 4 / (10 ** (precision + 1)) + row = work_order.required_items[0] + row.db_set("required_qty", flt(row.required_qty) + hidden_difference, update_modified=False) + work_order.reload() + required_qty = {row.item_code: flt(row.required_qty) for row in work_order.required_items} + + transfer_entry = frappe.get_doc( + make_stock_entry(work_order.name, "Material Transfer for Manufacture", 0) + ) + for item in transfer_entry.items: + item.qty = flt(required_qty[item.item_code], precision) + item.transfer_qty = item.qty + transfer_entry.submit() + + work_order.reload() + self.assertEqual( + flt(work_order.required_items[0].required_qty, precision), + flt(work_order.required_items[0].transferred_qty, precision), + ) + self.assertEqual(work_order.material_transferred_for_manufacturing, work_order.qty) + + def test_repair_material_transfer_precision_patch(self): + from erpnext.patches.v16_0.repair_work_order_material_transfer import ( + execute, + get_precision_affected_work_orders, + ) + + precision = frappe.get_precision("Work Order Item", "required_qty") + hidden_difference = 4 / (10 ** (precision + 1)) + work_order = make_wo_order_test_record(planned_start_date=now(), qty=2) + for index, row in enumerate(work_order.required_items): + required_qty = flt(row.required_qty) + (hidden_difference if index == 0 else 0) + row.db_set( + { + "required_qty": required_qty, + "transferred_qty": flt(required_qty, precision), + }, + update_modified=False, + ) + work_order.db_set("material_transferred_for_manufacturing", 1.99, update_modified=False) + + partial_work_order = make_wo_order_test_record(planned_start_date=now(), qty=2) + for row in partial_work_order.required_items: + row.db_set("transferred_qty", row.required_qty, update_modified=False) + partial_row = partial_work_order.required_items[0] + partial_row.db_set( + "transferred_qty", + flt(partial_row.required_qty, precision) - (1 / (10**precision)), + update_modified=False, + ) + partial_work_order.db_set("material_transferred_for_manufacturing", 1.99, update_modified=False) + + terminal_work_orders = [] + for status in ("Stopped", "Closed", "Completed"): + terminal_work_order = make_wo_order_test_record(planned_start_date=now(), qty=2) + for row in terminal_work_order.required_items: + row.db_set("transferred_qty", row.required_qty, update_modified=False) + terminal_work_order.db_set( + {"material_transferred_for_manufacturing": 1.99, "status": status}, + update_modified=False, + ) + terminal_work_orders.append(terminal_work_order) + + updates = get_precision_affected_work_orders() + self.assertIn(work_order.name, updates) + self.assertNotIn(partial_work_order.name, updates) + for terminal_work_order in terminal_work_orders: + self.assertNotIn(terminal_work_order.name, updates) + + execute() + work_order.reload() + partial_work_order.reload() + self.assertEqual(work_order.material_transferred_for_manufacturing, work_order.qty) + self.assertEqual(partial_work_order.material_transferred_for_manufacturing, 1.99) + for terminal_work_order in terminal_work_orders: + terminal_work_order.reload() + self.assertEqual(terminal_work_order.material_transferred_for_manufacturing, 1.99) + def test_work_order_material_request_and_bom_details(self): from erpnext.stock.doctype.material_request.material_request import ( make_stock_entry as mr_to_stock_entry, @@ -2367,7 +2501,7 @@ class TestWorkOrder(ERPNextTestSuite): self.assertTrue(se_doc.additional_costs) secondary_items = [] for item in se_doc.items: - if item.type or item.is_legacy_scrap_item: + if item.secondary_item_type or item.is_legacy_scrap_item: secondary_items.append(item.item_code) self.assertEqual( @@ -2832,7 +2966,7 @@ class TestWorkOrder(ERPNextTestSuite): # Secondary/Scrap item: should be taken from scrap warehouse in disassembly scrap_row = next((i for i in stock_entry.items if i.item_code == scrap_item), None) self.assertIsNotNone(scrap_row) - self.assertEqual(scrap_row.type, "Scrap") + self.assertEqual(scrap_row.secondary_item_type, "Scrap") self.assertTrue(scrap_row.s_warehouse) self.assertFalse(scrap_row.t_warehouse) self.assertEqual(scrap_row.s_warehouse, wo.scrap_warehouse) @@ -4748,7 +4882,7 @@ class TestWorkOrder(ERPNextTestSuite): bom.append( "secondary_items", { - "type": "Scrap", + "secondary_item_type": "Scrap", "item_code": scrap_item, "item_name": scrap_item, "qty": 3, @@ -4769,7 +4903,7 @@ class TestWorkOrder(ERPNextTestSuite): self.assertEqual(len(secondary_items), 1) row = secondary_items[0] self.assertEqual(row.item_code, scrap_item) - self.assertEqual(row.type, "Scrap") + self.assertEqual(row.secondary_item_type, "Scrap") # data is fetched from the BOM (carries bom_qty) self.assertEqual(flt(row.bom_qty), 8.0) # qty = (bom_secondary_qty / bom_qty) * wo_qty = (3 / 8) * 20 = 7.5 @@ -4796,7 +4930,7 @@ class TestWorkOrder(ERPNextTestSuite): bom.append( "secondary_items", { - "type": "Scrap", + "secondary_item_type": "Scrap", "item_code": scrap_item, "item_name": scrap_item, "qty": 3, @@ -4825,7 +4959,7 @@ class TestWorkOrder(ERPNextTestSuite): manufacture_entry = frappe.get_doc(make_stock_entry(wo_order.name, "Manufacture", 8)) manufacture_entry.submit() - generated_row = next(row for row in manufacture_entry.items if row.type == "Scrap") + generated_row = next(row for row in manufacture_entry.items if row.secondary_item_type == "Scrap") wo_order.reload() secondary_items = wo_order.secondary_items diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js index 04f259f1508..f0b5e90c42a 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.js +++ b/erpnext/manufacturing/doctype/work_order/work_order.js @@ -88,7 +88,7 @@ frappe.ui.form.on("Work Order", { return frm.doc.qty == doc.completed_qty ? "green" : "orange"; }); - frm.fields_dict["non_stock_items"].grid.set_column_disp_in_list_view("type", false); + frm.fields_dict["non_stock_items"].grid.set_column_disp_in_list_view("secondary_item_type", false); frm.fields_dict["secondary_items"].grid.set_column_disp_in_list_view("rate", false); }, @@ -1021,6 +1021,15 @@ erpnext.work_order = { return flt(max, precision("qty")); }, + get_pending_operation_process_loss: (frm) => { + if (!(frm.doc.operations || []).length) { + return 0; + } + + const total_loss = Math.max(...frm.doc.operations.map((row) => flt(row.process_loss_qty))); + return flt(Math.max(total_loss - flt(frm.doc.process_loss_qty), 0), precision("qty")); + }, + show_disassembly_prompt: function (frm) { let max_qty = flt(frm.doc.produced_qty - frm.doc.disassembled_qty); @@ -1077,6 +1086,11 @@ erpnext.work_order = { show_prompt_for_qty_input: function (frm, purpose, qty, additional_transfer_entry) { let max = !additional_transfer_entry ? this.get_max_transferable_qty(frm, purpose) : qty; + if (purpose === "Manufacture") { + max = flt(Math.max(max - flt(frm.doc.process_loss_qty), 0), precision("qty")); + } + const pending_process_loss = + purpose === "Manufacture" ? this.get_pending_operation_process_loss(frm) : 0; let fields = [ { @@ -1085,23 +1099,36 @@ erpnext.work_order = { fieldname: "qty", description: __("Max: {0}", [max]), default: max, + onchange: function () { + if (pending_process_loss && frm.qty_prompt) { + frm.qty_prompt.set_value( + "finished_good_qty", + flt(Math.max(flt(this.value) - pending_process_loss, 0), precision("qty")) + ); + } + }, }, ]; - if (!additional_transfer_entry) { - fields.push({ - fieldtype: "Check", - label: __("Consider Process Loss"), - fieldname: "consider_process_loss", - default: 0, - onchange: function () { - if (this.value) { - frm.qty_prompt.set_value("qty", max - frm.doc.process_loss_qty); - } else { - frm.qty_prompt.set_value("qty", max); - } + if (pending_process_loss) { + fields.push( + { + fieldtype: "Float", + label: __("Process Loss Qty"), + fieldname: "process_loss_qty", + default: pending_process_loss, + read_only: 1, + description: __("Process loss booked against the operations of this work order."), }, - }); + { + fieldtype: "Float", + label: __("Finished Good Qty"), + fieldname: "finished_good_qty", + default: flt(Math.max(max - pending_process_loss, 0), precision("qty")), + read_only: 1, + description: __("Actual quantity of the finished good that will be manufactured."), + } + ); } return new Promise((resolve, reject) => { diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index 2af7497564b..be202beb451 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -34,6 +34,10 @@ from erpnext.manufacturing.doctype.bom.bom import ( from erpnext.manufacturing.doctype.manufacturing_settings.manufacturing_settings import ( get_mins_between_operations, ) +from erpnext.manufacturing.doctype.work_order.services.material_coverage import ( + get_minimum_material_coverage_fraction, +) +from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults from erpnext.stock.doctype.batch.batch import make_batch from erpnext.stock.doctype.item.item import get_item_defaults, validate_end_of_life from erpnext.stock.doctype.serial_no.serial_no import get_available_serial_nos, get_serial_nos @@ -183,11 +187,14 @@ class WorkOrder(Document): .where( (parent.work_order == self.name) & (parent.docstatus == 1) - & ((child.type != "") | (child.is_legacy_scrap_item == 1)) + & ((child.secondary_item_type != "") | (child.is_legacy_scrap_item == 1)) ) .select( child.item_code, - Case().when(child.is_legacy_scrap_item == 1, "Scrap (Legacy)").else_(child.type).as_("type"), + Case() + .when(child.is_legacy_scrap_item == 1, "Scrap (Legacy)") + .else_(child.secondary_item_type) + .as_("secondary_item_type"), child.qty, child.uom, child.amount, @@ -203,7 +210,7 @@ class WorkOrder(Document): filters={"name": self.bom_no}, fields=[ "secondary_items.item_code", - "secondary_items.type", + "secondary_items.secondary_item_type", "secondary_items.qty", "secondary_items.uom", "secondary_items.cost as amount", @@ -573,7 +580,18 @@ class WorkOrder(Document): if not self.wip_warehouse and not self.skip_transfer: self.wip_warehouse = frappe.get_cached_value("Company", self.company, "default_wip_warehouse") if not self.fg_warehouse: - self.fg_warehouse = frappe.get_cached_value("Company", self.company, "default_fg_warehouse") + self.fg_warehouse = ( + frappe.get_cached_value("Company", self.company, "default_fg_warehouse") + or self.get_production_item_warehouse() + ) + + def get_production_item_warehouse(self): + if not self.production_item: + return None + + return get_item_defaults(self.production_item, self.company).get( + "default_warehouse" + ) or get_item_group_defaults(self.production_item, self.company).get("default_warehouse") def check_wip_warehouse_skip(self): if self.skip_transfer and not self.from_wip_warehouse: @@ -681,11 +699,7 @@ class WorkOrder(Document): elif self.docstatus == 1: if status not in ["Closed", "Stopped"]: status = "Not Started" - if ( - flt(self.material_transferred_for_manufacturing) > 0 - or self.skip_transfer - or self._has_transferred_material() - ): + if flt(self.material_transferred_for_manufacturing) > 0 or self._has_transferred_material(): status = "In Process" precision = frappe.get_precision("Work Order", "produced_qty") @@ -720,29 +734,9 @@ class WorkOrder(Document): return status def _has_transferred_material(self): - """True if any raw material transferred against this work order via a pick list or a - material request is still, net of returns, in WIP (these leave - material_transferred_for_manufacturing at 0 via the min-fraction rule).""" + """True if any raw material transferred against this work order is still in WIP.""" ste = frappe.qb.DocType("Stock Entry") ste_child = frappe.qb.DocType("Stock Entry Detail") - mr_ste = frappe.qb.DocType("Stock Entry") - mr_child = frappe.qb.DocType("Stock Entry Detail") - # Stock Entry only carries `material_request` at the child-row level, so a Stock - # Entry is "MR-sourced" if *any* of its rows link back to a Material Request against - # this work order; the join to mr_ste keeps this scoped to this work order's entries - # instead of scanning every Material-Request-linked row in the system. - mr_sourced_stock_entries = ( - frappe.qb.from_(mr_child) - .inner_join(mr_ste) - .on(mr_ste.name == mr_child.parent) - .select(mr_child.parent) - .where( - (mr_child.material_request.isnotnull()) - & (mr_ste.work_order == self.name) - & (mr_ste.docstatus == 1) - & (mr_ste.purpose == "Material Transfer for Manufacture") - ) - ) common_filters = ( (ste.work_order == self.name) & (ste.docstatus == 1) @@ -753,11 +747,7 @@ class WorkOrder(Document): .inner_join(ste_child) .on(ste_child.parent == ste.name) .select(Sum(ste_child.transfer_qty)) - .where( - common_filters - & (ste.is_return == 0) - & (ste.pick_list.isnotnull() | ste.name.isin(mr_sourced_stock_entries)) - ) + .where(common_filters & (ste.is_return == 0)) ).run()[0][0] # Returns don't carry their own pick_list/material_request reference, so net every # return against this work order to correctly clear WIP after a full return. @@ -1735,7 +1725,12 @@ class WorkOrder(Document): "allow_alternative_item": item.allow_alternative_item, "required_qty": item.qty, "source_warehouse": ( - self.source_warehouse or item.source_warehouse or item.default_warehouse + self.source_warehouse + or item.source_warehouse + or item.default_warehouse + or get_item_group_defaults(item.item_code, self.company).get( + "default_warehouse" + ) ) if not reset_source_warehouse else self.source_warehouse, @@ -1808,22 +1803,15 @@ class WorkOrder(Document): return frappe._dict({d.original_item or d.item_code: d.qty for d in data}) def recompute_material_transferred_for_manufacturing(self, transferred_items): - """Set material_transferred_for_manufacturing based on actual item-level transfers, not fg_completed_qty.""" + """Set transferred quantity from the raw materials that have actually moved.""" # Job Card transfers use the minimum completed quantity across operations. if self.operations and self.transfer_material_against == "Job Card": return - # When fg_completed_qty > 0 (direct stock entries, excess transfer), preserve the - # SUM(fg_completed_qty) approach so excess-transfer tracking works correctly. - sum_fg_completed_qty = self.get_transferred_or_manufactured_qty( + claimed_qty = self.get_transferred_or_manufactured_qty( "Material Transfer for Manufacture", "material_transferred_for_manufacturing" ) - if sum_fg_completed_qty: - self.db_set("material_transferred_for_manufacturing", sum_fg_completed_qty) - return - # Pick list flow sets fg_completed_qty=0; use min-fraction of actual item transfers - # so partial availability does not prematurely mark the work order as fully transferred. required_by_item = {} for row in self.required_items: if not row.include_item_in_manufacturing or flt(row.required_qty) <= 0: @@ -1833,12 +1821,13 @@ class WorkOrder(Document): if not required_by_item: return - min_fraction = min( - flt(transferred_items.get(item_code) or 0) / required_qty - for item_code, required_qty in required_by_item.items() + min_fraction = get_minimum_material_coverage_fraction( + required_by_item, + transferred_items, + self.precision("required_qty", "required_items"), ) - min_fraction = min(min_fraction, 1.0) - material_transferred = min_fraction * flt(self.qty) + covered_qty = min_fraction * flt(self.qty) + material_transferred = min(covered_qty, max(flt(self.qty), claimed_qty)) self.db_set("material_transferred_for_manufacturing", material_transferred) def update_qty_in_stock_reservation(self, row, transferred_qty, row_wise_serial_batch): diff --git a/erpnext/manufacturing/doctype/work_order/work_order_preview.html b/erpnext/manufacturing/doctype/work_order/work_order_preview.html index 95bdd291ee0..112c8d8250e 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order_preview.html +++ b/erpnext/manufacturing/doctype/work_order/work_order_preview.html @@ -20,11 +20,11 @@

    {% if data.value %} - + {{ __("Open Work Order {0}", [data.value.bold()]) }} {% endif %} {% if data.item_code %} - + {{ __("Open Item {0}", [data.item_code.bold()]) }} {% endif %}

    diff --git a/erpnext/manufacturing/doctype/workstation/workstation.py b/erpnext/manufacturing/doctype/workstation/workstation.py index 1dceddad256..afc18e12d13 100644 --- a/erpnext/manufacturing/doctype/workstation/workstation.py +++ b/erpnext/manufacturing/doctype/workstation/workstation.py @@ -507,7 +507,7 @@ def get_workstations(**kwargs): for d in data: d.workstation_name = get_link_to_form("Workstation", d.name) - d.status_image = d.on_status_image + d.status_image = frappe.utils.escape_html(d.on_status_image) d.workstation_off = "" d.color = color_map.get(d.status, "red") d.workstation_link = get_url_to_form("Workstation", d.name) diff --git a/erpnext/manufacturing/doctype/workstation/workstation_job_card.html b/erpnext/manufacturing/doctype/workstation/workstation_job_card.html index 2049f3fe6a5..be0e2433ce5 100644 --- a/erpnext/manufacturing/doctype/workstation/workstation_job_card.html +++ b/erpnext/manufacturing/doctype/workstation/workstation_job_card.html @@ -14,10 +14,10 @@
    {% $.each(data, (idx, d) => { %} -