Compare commits
574 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
108bc78693 | ||
|
|
c85112b093 | ||
|
|
4a3140102c | ||
|
|
6ef1fb6b39 | ||
|
|
de6b30c7ac | ||
|
|
1c32d05601 | ||
|
|
659bc1aca4 | ||
|
|
226a101119 | ||
|
|
5dfd1d48fa | ||
|
|
c9af48af35 | ||
|
|
d8ac0f3df7 | ||
|
|
af2bf7541f | ||
|
|
d070d56f72 | ||
|
|
cc5632a99c | ||
|
|
7be0b47778 | ||
|
|
5facb60bbe | ||
|
|
56b5387dbd | ||
|
|
9743d688d0 | ||
|
|
1d5f8d4436 | ||
|
|
6cb8662bec | ||
|
|
74dfabbe21 | ||
|
|
4096603656 | ||
|
|
574415b59b | ||
|
|
0eee6bbf7e | ||
|
|
ed72a28e41 | ||
|
|
4e0908d055 | ||
|
|
3c2ffde95b | ||
|
|
2c021dcdcd | ||
|
|
1ee5ae1e25 | ||
|
|
0aadb9e213 | ||
|
|
a0693983cc | ||
|
|
6b71ef5843 | ||
|
|
602683fdc0 | ||
|
|
1eea26fc5c | ||
|
|
c040075bd4 | ||
|
|
a2afb16f6b | ||
|
|
bdab0eea0f | ||
|
|
ba5d6b5004 | ||
|
|
5b13b99441 | ||
|
|
a3e87c7af1 | ||
|
|
31e2a709d5 | ||
|
|
e083cde3d7 | ||
|
|
09fc4a456e | ||
|
|
4774c41958 | ||
|
|
03e7e581d8 | ||
|
|
e88ffe032e | ||
|
|
ea8bc8ecb0 | ||
|
|
a40c6282a1 | ||
|
|
570d1783f9 | ||
|
|
2076203fc1 | ||
|
|
d7b7f74ac9 | ||
|
|
d27308d1cd | ||
|
|
06a82d4e1f | ||
|
|
f9eff57531 | ||
|
|
e64fbd6d3c | ||
|
|
88e709e1f0 | ||
|
|
988a1ab419 | ||
|
|
13bf123b24 | ||
|
|
22b956d33c | ||
|
|
10be112e85 | ||
|
|
bb256e41d7 | ||
|
|
d35d74346d | ||
|
|
969d48a554 | ||
|
|
d8b15ebaf7 | ||
|
|
b55dd5b284 | ||
|
|
5760b79747 | ||
|
|
eb961370ff | ||
|
|
cb08d576f6 | ||
|
|
9f40a252fc | ||
|
|
aee8b5bcad | ||
|
|
f7980927a1 | ||
|
|
c1e1026486 | ||
|
|
7ae53657f9 | ||
|
|
a6a71216a8 | ||
|
|
51008f2abc | ||
|
|
c1e5cbb55d | ||
|
|
f41da5cfab | ||
|
|
2d0ef63e72 | ||
|
|
884d4cbc48 | ||
|
|
9602c394dd | ||
|
|
51ff2658cb | ||
|
|
dd1c3ba164 | ||
|
|
6b068e1367 | ||
|
|
b9dcf7f857 | ||
|
|
9ebbec5d9a | ||
|
|
bb9f59a051 | ||
|
|
f8de94b7c6 | ||
|
|
6626e32719 | ||
|
|
d55bdcf921 | ||
|
|
40a79de34d | ||
|
|
82a1561120 | ||
|
|
3505de037e | ||
|
|
d548ef8158 | ||
|
|
3ad37363ed | ||
|
|
d46abb49f3 | ||
|
|
c57517b201 | ||
|
|
8efeea9c59 | ||
|
|
bf9e8cfbcc | ||
|
|
096fc88200 | ||
|
|
d5dedb1808 | ||
|
|
e50f80302a | ||
|
|
9d44ac88f2 | ||
|
|
892a782e59 | ||
|
|
b166bcf50b | ||
|
|
0e2d1bd4ed | ||
|
|
f080003415 | ||
|
|
96e7c5a3bd | ||
|
|
4bad150cf0 | ||
|
|
76568f0e8e | ||
|
|
49febea6f5 | ||
|
|
a59e1792b5 | ||
|
|
28d6987455 | ||
|
|
56e19f3a8b | ||
|
|
b6b56453e1 | ||
|
|
d55d0c06e3 | ||
|
|
8681a95010 | ||
|
|
1f63747916 | ||
|
|
332ec15dd7 | ||
|
|
6f8dafbb5e | ||
|
|
d4073d50b2 | ||
|
|
88bcee78a7 | ||
|
|
cc2796e676 | ||
|
|
dbaf6b569b | ||
|
|
d37cef7f60 | ||
|
|
01293bb3a3 | ||
|
|
55ad42cfd0 | ||
|
|
381cec7b87 | ||
|
|
4c87497b7c | ||
|
|
9fdf2a8bfe | ||
|
|
f773f1f539 | ||
|
|
7b8a224dd0 | ||
|
|
e1482f1acc | ||
|
|
c98d244af0 | ||
|
|
ee19fc0c7f | ||
|
|
ee2129ce1c | ||
|
|
beed9ae4f8 | ||
|
|
50ddf921be | ||
|
|
3769d87240 | ||
|
|
15050e326c | ||
|
|
0f809426d2 | ||
|
|
adab5d308c | ||
|
|
824122c42a | ||
|
|
afda26e4f3 | ||
|
|
d6d354b5c3 | ||
|
|
7d310bd182 | ||
|
|
8b33a6cdc0 | ||
|
|
1abe550e65 | ||
|
|
5605f8f20e | ||
|
|
a1580f2781 | ||
|
|
dfdededcf0 | ||
|
|
5aa744893d | ||
|
|
55cca49371 | ||
|
|
5e173c7106 | ||
|
|
cf3da35d67 | ||
|
|
a17ddcfe89 | ||
|
|
088826f6f0 | ||
|
|
f89eaa96d1 | ||
|
|
e526cfe7ec | ||
|
|
21c189184d | ||
|
|
2aaebdbe11 | ||
|
|
cda3174a57 | ||
|
|
91eeb76f7b | ||
|
|
df18c29fb7 | ||
|
|
7aebb39003 | ||
|
|
91bb25d0c9 | ||
|
|
b89d7eb558 | ||
|
|
ba004aab83 | ||
|
|
4c3762989b | ||
|
|
225b907a03 | ||
|
|
b543861cbe | ||
|
|
fc6595b92b | ||
|
|
d11df3645b | ||
|
|
ea4c83dcb3 | ||
|
|
3d05635d7a | ||
|
|
90b0db2d18 | ||
|
|
91a71d4f2c | ||
|
|
36ab7f01b4 | ||
|
|
130dd2da61 | ||
|
|
6d15d36639 | ||
|
|
4395d0bc4d | ||
|
|
6e4e2152af | ||
|
|
fc5d5d1600 | ||
|
|
180d7e9ceb | ||
|
|
7be281e712 | ||
|
|
9d5f4f729e | ||
|
|
b68087d690 | ||
|
|
a970e72819 | ||
|
|
4d0c5a51c9 | ||
|
|
41e1eb6af7 | ||
|
|
1761004bd5 | ||
|
|
c8fc5a2048 | ||
|
|
9b639b82cf | ||
|
|
314fa2bdad | ||
|
|
bff501c401 | ||
|
|
89d64f5b12 | ||
|
|
670269f85c | ||
|
|
38a15ab4fc | ||
|
|
8dfb35bb79 | ||
|
|
20e97c9dbc | ||
|
|
909f6da868 | ||
|
|
0ffc350f57 | ||
|
|
fea9357741 | ||
|
|
2fbc3b7259 | ||
|
|
f99923dc08 | ||
|
|
d5781b5de8 | ||
|
|
81adb7dec9 | ||
|
|
46d4ba904a | ||
|
|
8c48c36be6 | ||
|
|
f52b3090a9 | ||
|
|
e8703298ed | ||
|
|
98eba6b9ba | ||
|
|
34dc5bc812 | ||
|
|
ba9b85c1a6 | ||
|
|
4eefd2218a | ||
|
|
d58d56f4d4 | ||
|
|
1d7d055d16 | ||
|
|
2e7dca8693 | ||
|
|
746e21f283 | ||
|
|
60eed43269 | ||
|
|
b2b7d91010 | ||
|
|
1641f0815e | ||
|
|
e3f4b6ce6f | ||
|
|
7a6ec814b9 | ||
|
|
4325a8c82f | ||
|
|
6bff33b949 | ||
|
|
99c244c834 | ||
|
|
838db977fe | ||
|
|
837b656c45 | ||
|
|
7641a957eb | ||
|
|
f8a383b339 | ||
|
|
d144bfe2ca | ||
|
|
b5edc6676e | ||
|
|
f72a1eb782 | ||
|
|
a574979ebc | ||
|
|
49b3c0c064 | ||
|
|
d32a43c39f | ||
|
|
3162f31fd8 | ||
|
|
952c336f70 | ||
|
|
2f6a29b060 | ||
|
|
55e467dc20 | ||
|
|
df5aa98d00 | ||
|
|
ffa18f4dc8 | ||
|
|
cea952c1c4 | ||
|
|
92a3aa9fad | ||
|
|
3b7f626c0b | ||
|
|
8d71597c03 | ||
|
|
786779fd5c | ||
|
|
0c30c9cccb | ||
|
|
6479f0e82a | ||
|
|
f8da1ff59f | ||
|
|
043ab0c47e | ||
|
|
6e982264db | ||
|
|
ed9f8de78c | ||
|
|
80f1fc4fcb | ||
|
|
c26b090c72 | ||
|
|
a637010af1 | ||
|
|
108c1f8783 | ||
|
|
cfb0b3d371 | ||
|
|
e1a3b369e8 | ||
|
|
f0f54d53f4 | ||
|
|
fdf61e40f3 | ||
|
|
9a12221d72 | ||
|
|
6bea8c7bc2 | ||
|
|
7bfba0fb0e | ||
|
|
15597d7f60 | ||
|
|
19fb4f231d | ||
|
|
fc70f4c9e8 | ||
|
|
b0fc040dcc | ||
|
|
26018adff4 | ||
|
|
73933c1195 | ||
|
|
1d3d0ed595 | ||
|
|
9d80e47d27 | ||
|
|
f2fc91b73e | ||
|
|
b77eb6d383 | ||
|
|
6ced0da90b | ||
|
|
6aaec8e874 | ||
|
|
e4ba4d0efd | ||
|
|
acef1eaa9d | ||
|
|
75960296c9 | ||
|
|
924b9c1763 | ||
|
|
92f2771ae2 | ||
|
|
88a2580ec5 | ||
|
|
95a2e2f5e4 | ||
|
|
90f44ba6ac | ||
|
|
b32d97f071 | ||
|
|
8cb9cfdb81 | ||
|
|
44420e4df7 | ||
|
|
55bd4f7d06 | ||
|
|
1d1e03b792 | ||
|
|
bb4fcd9438 | ||
|
|
b61345c040 | ||
|
|
1827c3bc5f | ||
|
|
e65df29aed | ||
|
|
c9588f5aa3 | ||
|
|
6a2a290194 | ||
|
|
8c95b5492c | ||
|
|
3cf31eaefe | ||
|
|
0349c8e96d | ||
|
|
666b63aa5e | ||
|
|
16fca942bb | ||
|
|
bf5f7425bb | ||
|
|
a165451b84 | ||
|
|
5f7ac05af3 | ||
|
|
afc9afa01f | ||
|
|
fe032bfb6f | ||
|
|
71f5792f02 | ||
|
|
0c70bd4b10 | ||
|
|
f8ee7e12ef | ||
|
|
f8a93b6cb1 | ||
|
|
612ec6c289 | ||
|
|
2fe811695c | ||
|
|
3cedb81670 | ||
|
|
393afdaa1f | ||
|
|
80b1ff7744 | ||
|
|
0689d27072 | ||
|
|
e44372ca6b | ||
|
|
a94073d37d | ||
|
|
5d9a9473d3 | ||
|
|
6854d66cdc | ||
|
|
29675f8bbd | ||
|
|
2ffb4a7a8d | ||
|
|
692e465829 | ||
|
|
eaed755e0f | ||
|
|
f32d3716b8 | ||
|
|
e493a9252b | ||
|
|
e005662cf0 | ||
|
|
e83697c21c | ||
|
|
c3c654c672 | ||
|
|
c6a445fa8e | ||
|
|
6ebf5b0bbb | ||
|
|
668ea8a161 | ||
|
|
49c58975d9 | ||
|
|
3d9ef3202e | ||
|
|
4dd13fd81e | ||
|
|
edc5a79fbf | ||
|
|
a3bb3cded0 | ||
|
|
c8e88f5bba | ||
|
|
c4ffa9ceb0 | ||
|
|
b8834c3c1c | ||
|
|
c384bc8045 | ||
|
|
9d0e4c841b | ||
|
|
3097e73e5a | ||
|
|
eec101dffb | ||
|
|
40e5b0589a | ||
|
|
ee343c8c77 | ||
|
|
079ac113fb | ||
|
|
285ec76130 | ||
|
|
e1eb761807 | ||
|
|
ae8974b627 | ||
|
|
ea18cc464a | ||
|
|
064da78734 | ||
|
|
c87dc4771c | ||
|
|
c5aede5b4c | ||
|
|
d8785dde0c | ||
|
|
669e4df639 | ||
|
|
e7894fab39 | ||
|
|
f8be4394dc | ||
|
|
384f620c9d | ||
|
|
ba0ae97fdf | ||
|
|
a95a189592 | ||
|
|
5ede3a8a6f | ||
|
|
49e8628627 | ||
|
|
05521ee102 | ||
|
|
11e9c18b51 | ||
|
|
5fcb3d7775 | ||
|
|
84226006dd | ||
|
|
4fc998d0f9 | ||
|
|
938b9b2097 | ||
|
|
61c2d88781 | ||
|
|
fdba12d355 | ||
|
|
8e1014565e | ||
|
|
040c565a44 | ||
|
|
54f7616cf8 | ||
|
|
b27f2dc012 | ||
|
|
7bf3d908ba | ||
|
|
17caf1f6e5 | ||
|
|
b1c5f385bf | ||
|
|
457cfb7b60 | ||
|
|
46e0166d1f | ||
|
|
0b55567b44 | ||
|
|
f3ca6d0ac3 | ||
|
|
06ff0e42d9 | ||
|
|
1727bdb2b8 | ||
|
|
80300b321d | ||
|
|
5c8c606b50 | ||
|
|
7b8e9a39e7 | ||
|
|
054d63c94e | ||
|
|
4deb7aaea2 | ||
|
|
f146046845 | ||
|
|
f8942dd060 | ||
|
|
ee1f66bc86 | ||
|
|
ae77cb4959 | ||
|
|
6ba0f7bf75 | ||
|
|
3e2ebe5972 | ||
|
|
5f2f82de56 | ||
|
|
9d0d426ed6 | ||
|
|
d7ea4ec2b6 | ||
|
|
4d35ef149f | ||
|
|
34fe511260 | ||
|
|
03a3d5089c | ||
|
|
8af11201d9 | ||
|
|
cd35d45628 | ||
|
|
dd09f67e75 | ||
|
|
a51c4403a5 | ||
|
|
5656c6e969 | ||
|
|
635528e186 | ||
|
|
49e39f0cde | ||
|
|
e9784d1280 | ||
|
|
82e3e08650 | ||
|
|
721de2629e | ||
|
|
19d627c51f | ||
|
|
a1d129f836 | ||
|
|
79f52a54ef | ||
|
|
92091ce22d | ||
|
|
019196894c | ||
|
|
fbce19b2c6 | ||
|
|
84a9b6c816 | ||
|
|
aeb0934da0 | ||
|
|
347a580883 | ||
|
|
2891c5ebca | ||
|
|
fc1bb3ee1d | ||
|
|
bd194a9fb7 | ||
|
|
4bd999cbc5 | ||
|
|
bb154ad6c9 | ||
|
|
f7d133f4a0 | ||
|
|
b79151ccac | ||
|
|
5b509ca194 | ||
|
|
38aa8982f8 | ||
|
|
c46504dfdf | ||
|
|
279fc35cb2 | ||
|
|
4887292513 | ||
|
|
a056a7e390 | ||
|
|
d82fec317e | ||
|
|
2545651a77 | ||
|
|
43029c2754 | ||
|
|
3adcca8238 | ||
|
|
a76f957345 | ||
|
|
6935ae7f60 | ||
|
|
72e3741b44 | ||
|
|
609568d6d5 | ||
|
|
576c76f71c | ||
|
|
a952fef53d | ||
|
|
5dc46b6096 | ||
|
|
463bd7b742 | ||
|
|
e5cb6ab319 | ||
|
|
eeb280e06d | ||
|
|
2799039eec | ||
|
|
84f47e54af | ||
|
|
3cd67c9e9b | ||
|
|
6b3d94a5df | ||
|
|
218cc5d1f2 | ||
|
|
f53407b76e | ||
|
|
92988591fc | ||
|
|
9b69827d2c | ||
|
|
4136b3170a | ||
|
|
f3459158c6 | ||
|
|
a82056f424 | ||
|
|
a440125ef2 | ||
|
|
3e8aec4d64 | ||
|
|
97a27f3d46 | ||
|
|
0eb0f59194 | ||
|
|
fce8780c08 | ||
|
|
48d45869ab | ||
|
|
349360b3a1 | ||
|
|
5e646cd8ad | ||
|
|
8bcd104cec | ||
|
|
5e91280912 | ||
|
|
5fec1751a7 | ||
|
|
91802f914c | ||
|
|
f779df2737 | ||
|
|
fad1363756 | ||
|
|
b041b905d0 | ||
|
|
ed4e85bf97 | ||
|
|
1a8e484542 | ||
|
|
8794bb9c5f | ||
|
|
1cd13ce2d5 | ||
|
|
c1bdc108c8 | ||
|
|
6549710eaa | ||
|
|
4634194009 | ||
|
|
14006ad8c8 | ||
|
|
89a7730406 | ||
|
|
c2e913e0ca | ||
|
|
afbf3296d4 | ||
|
|
75963505dc | ||
|
|
9ec61cf150 | ||
|
|
699feb0384 | ||
|
|
da00bacb55 | ||
|
|
8ca8b14720 | ||
|
|
64b47ade3b | ||
|
|
423791a1cd | ||
|
|
9b09fea692 | ||
|
|
098cb65a54 | ||
|
|
2cf2f48c02 | ||
|
|
85febb969e | ||
|
|
952e19a9bb | ||
|
|
451ad3fe93 | ||
|
|
cec0728bba | ||
|
|
44838ea239 | ||
|
|
3c29d6faa2 | ||
|
|
5c4fdfce44 | ||
|
|
19bed183b0 | ||
|
|
53523539f4 | ||
|
|
a5488e43ad | ||
|
|
f8a2587cf4 | ||
|
|
337972eada | ||
|
|
e5944e8866 | ||
|
|
ee17a60872 | ||
|
|
35ad87bb14 | ||
|
|
421bef2db4 | ||
|
|
0048d29799 | ||
|
|
5029670657 | ||
|
|
d40ec15f1c | ||
|
|
9873c4029b | ||
|
|
78b4ae02cb | ||
|
|
9fa9b34930 | ||
|
|
61b6918e73 | ||
|
|
755d14b004 | ||
|
|
2d3670b6a4 | ||
|
|
8ff1c7b3e0 | ||
|
|
8df03c6e30 | ||
|
|
cab2fc6e73 | ||
|
|
a5b9008088 | ||
|
|
0a5ccb008a | ||
|
|
83b8d33e78 | ||
|
|
9c2a20a67b | ||
|
|
a7465f8fd6 | ||
|
|
49b476b9e5 | ||
|
|
7f7f77f4d7 | ||
|
|
356c552b41 | ||
|
|
1ccbd82b35 | ||
|
|
e606678b8f | ||
|
|
45db6156c7 | ||
|
|
9d3da40351 | ||
|
|
3f51a8aed4 | ||
|
|
e7d09edc0d | ||
|
|
94c7fa0141 | ||
|
|
abe9abc90b | ||
|
|
dbb25b67a5 | ||
|
|
d4e8e05749 | ||
|
|
02d28f1422 | ||
|
|
a97265c8af | ||
|
|
0480ad45f6 | ||
|
|
c8ea02d745 | ||
|
|
028f246cae | ||
|
|
f683bbee59 | ||
|
|
e01309f07e | ||
|
|
d7786190e6 | ||
|
|
5bce109e8e | ||
|
|
a2531995f9 | ||
|
|
98ccde84fb | ||
|
|
a12840f803 | ||
|
|
3e2f36034f | ||
|
|
d8c6213828 | ||
|
|
dd56b5f4ac | ||
|
|
8444febbda | ||
|
|
b26c3f2263 | ||
|
|
03791fceee | ||
|
|
542782e400 | ||
|
|
8bdf8e675f | ||
|
|
2da81732eb | ||
|
|
e1f46be230 | ||
|
|
81b8627250 | ||
|
|
79586775b2 | ||
|
|
8ee5498fe0 | ||
|
|
e8ab320028 | ||
|
|
c80796cdd5 | ||
|
|
fde03453e4 | ||
|
|
826e18a29f | ||
|
|
bdd1ee2185 | ||
|
|
660f479ec8 | ||
|
|
fa557f494b | ||
|
|
695d09f9cd | ||
|
|
66c9940d73 | ||
|
|
204af3ce90 |
@@ -63,7 +63,7 @@ Your project neither promotes nor is associated with entities that currently fai
|
||||
|
||||
Use of the ERPNext name and logo is additionally allowed in the following situations:
|
||||
|
||||
All other ERPNext-related businesses or projects can use the ERPNext name and logo to refer to and explain their services, but they cannot use them as part of a product, project, service, domain, or company name and they cannot use them in any way that suggests an affiliation with or endorsement by the ERPNext or WebNotes or the ERPNext open source project. For example, a consulting company can describe its business as “123 Web Services, offering ERPNext consulting for small businesses,” but cannot call its business “The ERPNext Consulting Company.”
|
||||
All other ERPNext-related businesses or projects can use the ERPNext name and logo to refer to and explain their services, but they cannot use them as part of a product, project, service, domain, or company name and they cannot use them in any way that suggests an affiliation with or endorsement by ERPNext or Frappe Technologies or the ERPNext open source project. For example, a consulting company can describe its business as “123 Web Services, offering ERPNext consulting for small businesses,” but cannot call its business “The ERPNext Consulting Company.”
|
||||
|
||||
Similarly, it’s OK to use the ERPNext logo as part of a page that describes your products or services, but it is not OK to use it as part of your company or product logo or branding itself. Under no circumstances is it permitted to use ERPNext as part of a top-level domain name.
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
from __future__ import unicode_literals
|
||||
__version__ = '6.12.10'
|
||||
__version__ = '6.17.0'
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
"oldfieldtype": "Section Break",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -46,6 +47,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -71,6 +73,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -95,6 +98,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -120,6 +124,7 @@
|
||||
"options": "Company",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -143,6 +148,7 @@
|
||||
"options": "\nAsset\nLiability\nIncome\nExpense\nEquity",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -166,6 +172,7 @@
|
||||
"options": "\nBalance Sheet\nProfit and Loss",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -191,6 +198,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -212,6 +220,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -238,6 +247,7 @@
|
||||
"options": "Account",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -261,9 +271,10 @@
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "account_type",
|
||||
"oldfieldtype": "Select",
|
||||
"options": "\nBank\nCash\nTax\nChargeable\nWarehouse\nReceivable\nPayable\nEquity\nFixed Asset\nCost of Goods Sold\nExpense Account\nRound Off\nIncome Account\nStock Received But Not Billed\nExpenses Included In Valuation\nStock Adjustment\nStock\nTemporary",
|
||||
"options": "\nBank\nCash\nDepreciation\nTax\nChargeable\nWarehouse\nReceivable\nPayable\nEquity\nFixed Asset\nCost of Goods Sold\nExpense Account\nRound Off\nIncome Account\nStock Received But Not Billed\nExpenses Included In Valuation\nStock Adjustment\nStock\nTemporary",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -289,6 +300,7 @@
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -315,6 +327,7 @@
|
||||
"options": "No\nYes",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -338,6 +351,7 @@
|
||||
"options": "Warehouse",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -361,6 +375,7 @@
|
||||
"options": "\nDebit\nCredit",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -383,6 +398,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -405,6 +421,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -427,6 +444,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -445,7 +463,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-16 06:29:41.535663",
|
||||
"modified": "2015-12-12 10:19:54.365839",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Account",
|
||||
|
||||
@@ -23,6 +23,8 @@ class Account(Document):
|
||||
frappe.db.get_value("Company", self.company, "abbr")
|
||||
|
||||
def validate(self):
|
||||
if frappe.local.flags.allow_unverified_charts:
|
||||
return
|
||||
self.validate_parent()
|
||||
self.validate_root_details()
|
||||
self.set_root_and_report_type()
|
||||
@@ -199,6 +201,10 @@ class Account(Document):
|
||||
|
||||
if val != [self.is_group, self.root_type, self.company]:
|
||||
throw(_("""Merging is only possible if following properties are same in both records. Is Group, Root Type, Company"""))
|
||||
|
||||
if self.is_group and frappe.db.get_value("Account", new, "parent_account") == old:
|
||||
frappe.db.set_value("Account", new, "parent_account",
|
||||
frappe.db.get_value("Account", old, "parent_account"))
|
||||
|
||||
return new_account
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from unidecode import unidecode
|
||||
|
||||
def create_charts(chart_name, company):
|
||||
chart = get_chart(chart_name)
|
||||
|
||||
|
||||
if chart:
|
||||
accounts = []
|
||||
|
||||
@@ -40,9 +40,9 @@ def create_charts(chart_name, company):
|
||||
"account_currency": frappe.db.get_value("Company", company, "default_currency")
|
||||
})
|
||||
|
||||
if root_account:
|
||||
if root_account or frappe.local.flags.allow_unverified_charts:
|
||||
account.flags.ignore_mandatory = True
|
||||
|
||||
|
||||
account.insert()
|
||||
|
||||
accounts.append(account_name_in_db)
|
||||
@@ -67,13 +67,17 @@ def get_chart(chart_name):
|
||||
from erpnext.accounts.doctype.account.chart_of_accounts.verified import standard_chart_of_accounts
|
||||
return standard_chart_of_accounts.get()
|
||||
else:
|
||||
path = os.path.join(os.path.dirname(__file__), "verified")
|
||||
for fname in os.listdir(path):
|
||||
if fname.endswith(".json"):
|
||||
with open(os.path.join(path, fname), "r") as f:
|
||||
chart = f.read()
|
||||
if chart and json.loads(chart).get("name") == chart_name:
|
||||
return json.loads(chart).get("tree")
|
||||
folders = ("verified",)
|
||||
if frappe.local.flags.allow_unverified_charts:
|
||||
folders = ("verified", "unverified")
|
||||
for folder in folders:
|
||||
path = os.path.join(os.path.dirname(__file__), folder)
|
||||
for fname in os.listdir(path):
|
||||
if fname.endswith(".json"):
|
||||
with open(os.path.join(path, fname), "r") as f:
|
||||
chart = f.read()
|
||||
if chart and json.loads(chart).get("name") == chart_name:
|
||||
return json.loads(chart).get("tree")
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_charts_for_country(country):
|
||||
@@ -82,24 +86,22 @@ def get_charts_for_country(country):
|
||||
def _get_chart_name(content):
|
||||
if content:
|
||||
content = json.loads(content)
|
||||
if content and content.get("is_active", "No") == "Yes" and content.get("disabled", "No") == "No":
|
||||
if content and content.get("disabled", "No") == "No":
|
||||
charts.append(content["name"])
|
||||
|
||||
country_code = frappe.db.get_value("Country", country, "code")
|
||||
if country_code:
|
||||
path = os.path.join(os.path.dirname(__file__), "verified")
|
||||
for fname in os.listdir(path):
|
||||
if fname.startswith(country_code) and fname.endswith(".json"):
|
||||
with open(os.path.join(path, fname), "r") as f:
|
||||
_get_chart_name(f.read())
|
||||
folders = ("verified",)
|
||||
if frappe.local.flags.allow_unverified_charts:
|
||||
folders = ("verified", "unverified")
|
||||
|
||||
# countries_use_OHADA_system = ["Benin", "Burkina Faso", "Cameroon", "Central African Republic", "Comoros",
|
||||
# "Congo", "Ivory Coast", "Gabon", "Guinea", "Guinea Bissau", "Equatorial Guinea", "Mali", "Niger",
|
||||
# "Replica of Democratic Congo", "Senegal", "Chad", "Togo"]
|
||||
#
|
||||
# if country in countries_use_OHADA_system:
|
||||
# with open(os.path.join(os.path.dirname(__file__), "syscohada_syscohada_chart_template.json"), "r") as f:
|
||||
# _get_chart_name(f.read())
|
||||
for folder in folders:
|
||||
path = os.path.join(os.path.dirname(__file__), folder)
|
||||
|
||||
for fname in os.listdir(path):
|
||||
if fname.startswith(country_code) and fname.endswith(".json"):
|
||||
with open(os.path.join(path, fname), "r") as f:
|
||||
_get_chart_name(f.read())
|
||||
|
||||
if len(charts) != 1:
|
||||
charts.append("Standard")
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "at",
|
||||
"name": "Austria - Chart of Accounts",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"Summe Abschreibungen und Aufwendungen": {
|
||||
"7010 bis 7080 Abschreibungen auf das Anlageverm\u00f6gen (ausgenommen Finanzanlagen)": {},
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "be",
|
||||
"name": "Belgian PCMN",
|
||||
"disabled": "Yes",
|
||||
"tree": {
|
||||
"CLASSE 1": {
|
||||
"BENEFICE (PERTE) REPORTE(E)": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "br",
|
||||
"name": "Planilha de Contas Brasileira",
|
||||
"is_active": "No",
|
||||
"tree": {
|
||||
"ATIVO": {
|
||||
"CIRCULANTE": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "ca",
|
||||
"name": "Chart of Accounts for english-speaking provinces",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"ASSETS": {
|
||||
"CURRENT ASSETS": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "ca",
|
||||
"name": "Plan comptable pour les provinces francophones",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"ACTIF": {
|
||||
"ACTIFS COURANTS": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "ch",
|
||||
"name": "Plan comptable STERCHI",
|
||||
"is_active": "Yes",
|
||||
"disabled": "Yes",
|
||||
"tree": {
|
||||
"Actif": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "co",
|
||||
"name": "Unique Account Chart - PUC",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"ACTIVO": {
|
||||
"DEUDORES": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "cr",
|
||||
"name": "Costa Rica - Company 0",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"0-Activo": {
|
||||
"0-Activo circulante": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "cr",
|
||||
"name": "Costa Rica - Company 1",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"xActivo": {
|
||||
"root_type": "Asset",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"country_code": "de",
|
||||
"name": "Deutscher Kontenplan SKR04",
|
||||
"is_active": "Yes",
|
||||
"disabled": "Yes",
|
||||
"tree": {
|
||||
"Bilanz - Aktiva": {
|
||||
"Anlageverm\u00f6gen": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "de",
|
||||
"name": "Deutscher Kontenplan SKR03",
|
||||
"is_active": "No",
|
||||
"disabled": "Yes",
|
||||
"tree": {
|
||||
"Aktiva": {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"country_code": "es",
|
||||
"name": "PGCE com\u00fan",
|
||||
"disabled": "Yes",
|
||||
"tree": {
|
||||
"Acreedores y deudores por operaciones comerciales": {
|
||||
"Acreedores varios": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "et",
|
||||
"name": "Ethiopia Tax and Account Chart Template",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"ASSETS": {
|
||||
"Cash and Cash Equivalents": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "gt",
|
||||
"name": "Plantilla de cuentas de Guatemala (sencilla)",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"Activo": {
|
||||
"Activo Corriente": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "hn",
|
||||
"name": "Plantilla de cuentas de Honduras (sencilla)",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"Activo": {
|
||||
"Activo Corriente": {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"country_code": "lu",
|
||||
"name": "PCMN Luxembourg",
|
||||
"disabled": "Yes",
|
||||
"tree": {
|
||||
"TOTAL CLASSES 1 A 5": {
|
||||
"CLASSE 1 - COMPTES DE CAPITAUX, DE PROVISIONS ET DE DETTES FINANCIERES": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "pa",
|
||||
"name": "Plan de Cuentas",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"ACTIVOS": {
|
||||
"Activo Fijo": {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"country_code": "ro",
|
||||
"name": "Romania - Chart of Accounts",
|
||||
"disabled": "Yes",
|
||||
"tree": {
|
||||
"CONTURI FINANCIARE": {
|
||||
"CONTURI DE BILANT": {
|
||||
|
||||
@@ -1,223 +0,0 @@
|
||||
{
|
||||
"country_code": "sg",
|
||||
"name": "Singapore Chart of Accounts",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"Assets": {
|
||||
"Cash and cash equivalents": {
|
||||
"Cash on hand": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Client trust account": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Current": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Money market": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Rents held in trust": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Savings": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Current assets": {
|
||||
"Allowance for bad debts": {},
|
||||
"Development costs": {},
|
||||
"Employee cash advances": {},
|
||||
"Inventory": {},
|
||||
"Investments - other": {},
|
||||
"Loans to officers": {},
|
||||
"Loans to others": {},
|
||||
"Loans to shareholders": {},
|
||||
"Other Current Assets": {},
|
||||
"Prepaid expenses": {},
|
||||
"Retainage": {},
|
||||
"Undeposited funds": {}
|
||||
},
|
||||
"Non-current assets": {
|
||||
"Accumulated amortization of non-current assets": {},
|
||||
"Available-for-sale financial assets": {},
|
||||
"Deferred tax": {},
|
||||
"Goodwill": {},
|
||||
"Intangible Assets": {},
|
||||
"Investments": {},
|
||||
"Lease Buyout": {},
|
||||
"Licences": {},
|
||||
"Organisational costs": {},
|
||||
"Other intangible assets": {},
|
||||
"Other non-current assets": {},
|
||||
"Prepayments and accrued income": {},
|
||||
"Security Deposits": {}
|
||||
},
|
||||
"Property, plant and equipment": {
|
||||
"Accumulated amortisation": {},
|
||||
"Accumulated depletion": {},
|
||||
"Accumulated depreciation": {},
|
||||
"Buildings": {},
|
||||
"Depletable assets": {},
|
||||
"Furniture and fixtures": {},
|
||||
"Leasehold improvements": {},
|
||||
"Machinery and equipment": {},
|
||||
"Other Assets": {},
|
||||
"Vehicles": {}
|
||||
},
|
||||
"Purchase Tax Receivable": {
|
||||
"Purchase Tax Account 0% EP": {},
|
||||
"Purchase Tax Account 0% ME": {},
|
||||
"Purchase Tax Account 0% NR": {},
|
||||
"Purchase Tax Account 0% OP": {},
|
||||
"Purchase Tax Account 0% ZP": {},
|
||||
"Purchase Tax Account 7% BL": {},
|
||||
"Purchase Tax Account 7% IM": {},
|
||||
"Purchase Tax Account 7% TX-E33": {},
|
||||
"Purchase Tax Account 7% TX-N33": {},
|
||||
"Purchase Tax Account 7% TX-RE": {},
|
||||
"Purchase Tax Account 7% TX7": {},
|
||||
"Purchase Tax Account MES": {}
|
||||
},
|
||||
"Trade and other receivable": {
|
||||
"Other Receivable Account": {
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"Trade Receivable Account": {
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"root_type": "Asset"
|
||||
},
|
||||
"Liabilities": {
|
||||
"Current liabilities": {
|
||||
"Client Trust Accounts - Liabilities": {},
|
||||
"Current Tax Liability": {},
|
||||
"Current portion of employee benefits obligations": {},
|
||||
"Current portion of obligations under finance leases": {},
|
||||
"GST Payable": {},
|
||||
"Insurance Payable": {},
|
||||
"Interest payables": {},
|
||||
"Line of Credit": {},
|
||||
"Loan Payable": {},
|
||||
"Payroll Clearing": {},
|
||||
"Payroll liabilities": {},
|
||||
"Prepaid Expenses Payable": {},
|
||||
"Provision for warranty obligations": {},
|
||||
"Rents in trust - Liability": {},
|
||||
"Short term borrowings": {}
|
||||
},
|
||||
"Equity": {
|
||||
"Accumulated Adjustment": {},
|
||||
"Opening Balance Equity": {},
|
||||
"Ordinary shares": {},
|
||||
"Owner's Equity": {},
|
||||
"Paid-in capital or surplus": {},
|
||||
"Partner's Equity": {},
|
||||
"Preferred shares": {},
|
||||
"Retained Earnings": {},
|
||||
"Share capital": {},
|
||||
"Treasury Shares": {}
|
||||
},
|
||||
"Non-current liabilities": {
|
||||
"Accruals and Deferred Income": {},
|
||||
"Bank loans": {},
|
||||
"Long term borrowings": {},
|
||||
"Long term employee benefit obligations": {},
|
||||
"Notes Payable": {},
|
||||
"Obligations under finance leases": {},
|
||||
"Other non-current liabilities": {},
|
||||
"Shareholder Notes Payable": {}
|
||||
},
|
||||
"Sale Tax Payables": {
|
||||
" Sales Tax Account 0% ES33": {},
|
||||
"Sales Tax Account 0% ESN33": {},
|
||||
"Sales Tax Account 0% OS": {},
|
||||
"Sales Tax Account 0% ZR": {},
|
||||
"Sales Tax Account 7% DS": {},
|
||||
"Sales Tax Account 7% SR": {}
|
||||
},
|
||||
"Trade and other payables": {
|
||||
"Other Payable Account": {
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"Trade Payable Account": {
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"root_type": "Liability"
|
||||
},
|
||||
"Cost of sales": {
|
||||
"Cost of Good Sold": {
|
||||
"Cost of Labour - COS": {},
|
||||
"Equipment rental - COS": {},
|
||||
"Freight and delivery - COS": {},
|
||||
"Other costs of sales - COS": {},
|
||||
"Supplies and materials - COS": {}
|
||||
},
|
||||
"root_type": "Expense"
|
||||
},
|
||||
"Income": {
|
||||
"Other revenue": {
|
||||
"Dividend revenue": {},
|
||||
"Gain/loss on sale of fixed assets or investments": {},
|
||||
"Interest earned": {},
|
||||
"Other investment revenue": {},
|
||||
"Other miscellaneous revenue": {},
|
||||
"Tax-exempt interest": {}
|
||||
},
|
||||
"Revenue": {
|
||||
"Discounts/refunds given": {},
|
||||
"Non-profit revenue": {},
|
||||
"Other primary revenue": {},
|
||||
"Sales of product revenue": {},
|
||||
"Service/fee revenue": {},
|
||||
"Unapplied cash payment income": {}
|
||||
},
|
||||
"root_type": "Income"
|
||||
},
|
||||
"Indirect Expenses": {
|
||||
"Expenses": {
|
||||
"Administrative expenses": {},
|
||||
"Advertising/promotional": {},
|
||||
"Auto": {},
|
||||
"Bad debts": {},
|
||||
"Bank charges": {},
|
||||
"Charitable contributions": {},
|
||||
"Cost of labour": {},
|
||||
"Distribution costs": {},
|
||||
"Dues and subscriptions": {},
|
||||
"Entertainment": {},
|
||||
"Equipment rental": {},
|
||||
"Finance costs": {},
|
||||
"Insurance": {},
|
||||
"Interest paid": {},
|
||||
"Legal and professional fees": {},
|
||||
"Meals and entertainment": {},
|
||||
"Other miscellaneous service cost": {},
|
||||
"Payroll expenses": {},
|
||||
"Promotional meals": {},
|
||||
"Rent or lease of buildings": {},
|
||||
"Repair and maintenance": {},
|
||||
"Shipping, freight, and delivery": {},
|
||||
"Supplies": {},
|
||||
"Taxes paid": {},
|
||||
"Travel": {},
|
||||
"Travel meals": {},
|
||||
"Unapplied cash bill payment expense": {},
|
||||
"Utilities": {}
|
||||
},
|
||||
"Other Expenses": {
|
||||
"Amortisation": {},
|
||||
"Depreciation": {},
|
||||
"Exchange Gain or Loss": {},
|
||||
"Other Expense": {},
|
||||
"Penalties and settlements": {}
|
||||
},
|
||||
"root_type": "Expense"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"country_code": "si",
|
||||
"name": "Kontni na\u010drt za gospodarske dru\u017ebe",
|
||||
"disabled": "Yes",
|
||||
"tree": {
|
||||
"DOLGORO\u010cNA SREDSTVA": {
|
||||
"DANA DOLGORO\u010cNA POSOJILA IN TERJATVE ZA NEVPLA\u010cANI VPOKLICANI KAPITAL": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "th",
|
||||
"name": "Thailand Chart of Accounts",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"Assets": {
|
||||
"Account Receivable": {},
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "uy",
|
||||
"name": "Plan de Cuentas",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"ACTIVO": {
|
||||
"ACTIVO CORRIENTE": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "ae",
|
||||
"name": "U.A.E Chart of Accounts",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"Assets": {
|
||||
"Current Assets": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "gt",
|
||||
"name": "Cuentas de Guatemala",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"Activos": {
|
||||
"Activo Corriente": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "in",
|
||||
"name": "Chart of Accounts - India",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"Application of Funds (Assets)": {
|
||||
"Current Assets": {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"country_code": "ni",
|
||||
"name": "Catalogo de Cuentas Nicaragua",
|
||||
"is_active": "Yes",
|
||||
"tree": {
|
||||
"Activo": {
|
||||
"Activo Corriente": {
|
||||
|
||||
@@ -0,0 +1,273 @@
|
||||
{
|
||||
"country_code": "sg",
|
||||
"name": "Singapore Default Chart of Accounts",
|
||||
"tree": {
|
||||
"Assets": {
|
||||
"Current assets": {
|
||||
"Accounts Receivable": {
|
||||
"Credit Cards": {
|
||||
"AMEX Receivable": {},
|
||||
"CUP Receivale": {},
|
||||
"MC Receivable": {},
|
||||
"NETS Receivable": {},
|
||||
"VISA Receivable": {}
|
||||
},
|
||||
"Debtors": {
|
||||
"account_type": "Receivable"
|
||||
}
|
||||
},
|
||||
"Bank Accounts": {
|
||||
"Paypal Account": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Cash in Hand": {
|
||||
"Cash in Transit": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Petty Cash": {
|
||||
"account_type": "Cash"
|
||||
}
|
||||
},
|
||||
"Loans and Advances-Assets": {
|
||||
"Prepayments": {}
|
||||
},
|
||||
"Securities and Deposits": {
|
||||
"Bank Guarantees": {},
|
||||
"Bank Deposits": {},
|
||||
"Rental Deposits": {}
|
||||
},
|
||||
"Stock Assets": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Tax Assets": {
|
||||
"GST-Input": {}
|
||||
}
|
||||
},
|
||||
"Non-current assets": {
|
||||
"Fixed Assets": {
|
||||
"Accumulated Depreciation": {
|
||||
"AccDep-Equipment-ICT": {},
|
||||
"AccDep-Furniture and Fixtures": {},
|
||||
"AccDep-Equipment-Office": {},
|
||||
"AccDep-Motor Vehicle": {},
|
||||
"AccDep-Plant and Machinery": {}
|
||||
},
|
||||
"Equipment-ICT": {},
|
||||
"Furniture and Fixtures": {},
|
||||
"Equipment-Office": {},
|
||||
"Motor Vehicle": {},
|
||||
"Plant and Machinery": {}
|
||||
},
|
||||
"Non-Fixed Assets": {
|
||||
"Goodwill": {},
|
||||
"Investments": {
|
||||
"Investments-Associated Company": {},
|
||||
"Investments-Subsidiary": {}
|
||||
}
|
||||
},
|
||||
"Shares": {
|
||||
"Shares-Quoted": {},
|
||||
"Shares-Unquoted": {}
|
||||
}
|
||||
},
|
||||
"Temporary Accunts": {
|
||||
"Temporary Opening": {
|
||||
"account_type": "Temporary"
|
||||
}
|
||||
},
|
||||
"root_type": "Asset"
|
||||
},
|
||||
"Liabilities": {
|
||||
"Current liabilities": {
|
||||
"Accounts Payable": {
|
||||
"Creditors":{
|
||||
"account_type": "Payable"
|
||||
}
|
||||
},
|
||||
"Duties and Taxes": {
|
||||
"account_type": "Tax",
|
||||
"Deferred Tax Liabilities-Current": {},
|
||||
"GST-Output": {},
|
||||
"Income Tax Payable": {}
|
||||
},
|
||||
"Loans-Current": {
|
||||
"Amount Owing to Directors": {},
|
||||
"Bank Overdaft Account": {},
|
||||
"Secured Loans": {},
|
||||
"Unsecured Loans": {}
|
||||
},
|
||||
"Provision and Accruals": {
|
||||
"Accruals": {
|
||||
"Accr-CPF": {},
|
||||
"Accr-Sundry": {},
|
||||
"Accr-Withholding Tax": {}
|
||||
},
|
||||
"Provisions": {
|
||||
"Prov-Audit Fee": {},
|
||||
"Prov-Others": {},
|
||||
"Prov-Tax Fee": {},
|
||||
"Prov-Bonus": {
|
||||
"Prov-Bonus-Executive": {},
|
||||
"Prov-Bonus-Non Executive": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Sponsorship Funds": {},
|
||||
"Stock Liabilities": {
|
||||
"Stock Received But Not Billed": {
|
||||
"account_type": "Stock Received But Not Billed"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Non-current liabilities": {
|
||||
"Deferred Tax Liabilities": {},
|
||||
"Loans-Non Current": {}
|
||||
},
|
||||
"Capital Account": {
|
||||
"Reserves and Surplus": {},
|
||||
"Shareholder Funds": {}
|
||||
},
|
||||
"root_type": "Liability"
|
||||
},
|
||||
"Equity": {
|
||||
"Share Capital": {},
|
||||
"Current Year Earnings": {},
|
||||
"Proposed Dividends": {},
|
||||
"Retained Earnings": {},
|
||||
"root_type": "Equity"
|
||||
},
|
||||
"Income": {
|
||||
"Direct Income": {
|
||||
"Management Income": {},
|
||||
"Sales Income": {}
|
||||
},
|
||||
"Indirect Income": {
|
||||
"Government Grants": {},
|
||||
"Interest Income": {
|
||||
"Current Account Interest Earned": {},
|
||||
"Fixed Deposit Interest Earned": {}
|
||||
},
|
||||
"Other Income": {},
|
||||
"Service Charges": {}
|
||||
},
|
||||
"root_type": "Income"
|
||||
},
|
||||
"Expenses": {
|
||||
"Expenses-Administrative": {
|
||||
"Audit Fees": {},
|
||||
"Bank charges and interest": {},
|
||||
"Currency Exchange Differences": {},
|
||||
"Insurance": {},
|
||||
"Interest on Loan": {},
|
||||
"Legal and Professional Fees": {},
|
||||
"Loss on Disposal of FA": {},
|
||||
"Postal and Courier Charges": {},
|
||||
"Printing and Stationery": {},
|
||||
"Secretarial Fees": {},
|
||||
"Tax Agent Fees": {}
|
||||
},
|
||||
"Expenses-Direct": {
|
||||
"Cost of Goods Sold": {
|
||||
"account_type": "Cost of Goods Sold"
|
||||
},
|
||||
"Cost of Sales": {},
|
||||
"Expenses Included in Valuation": {
|
||||
"account_type": "Expenses Included In Valuation"
|
||||
},
|
||||
"Stock Adjustment": {
|
||||
"account_type": "Stock Adjustment"
|
||||
}
|
||||
},
|
||||
"Expenses-Marketing": {
|
||||
"Advertising and Promotion": {},
|
||||
"Graphic Design Fees": {},
|
||||
"Internet Marketing": {}
|
||||
},
|
||||
"Expenses-Operating": {
|
||||
"Cleaning Costs": {},
|
||||
"Commission Charges": {
|
||||
"Comm-Credit Card": {},
|
||||
"Comm-NETS": {},
|
||||
"Comm-Paypal": {}
|
||||
},
|
||||
"Communication Costs": {
|
||||
"Internet Connection": {},
|
||||
"Telephone Costs": {}
|
||||
},
|
||||
"Entertainment Expenses": {},
|
||||
"General Expenses": {},
|
||||
"Licence Fees": {},
|
||||
"Rental Costs": {
|
||||
"Rental-Premises": {},
|
||||
"Rental-Equipment": {},
|
||||
"Rental-Storage": {}
|
||||
},
|
||||
"Repairs and Maintenance": {
|
||||
"R&M-ICT": {},
|
||||
"R&M-Building": {},
|
||||
"R&M-Fixtures & Furniture": {},
|
||||
"R&M-Office": {},
|
||||
"R&M-Plant & Machinery": {}
|
||||
},
|
||||
"Service Fees": {},
|
||||
"Subscription Fees": {
|
||||
"Publication Subscriptions": {},
|
||||
"TV Subscriptions": {}
|
||||
},
|
||||
"Travel Expenses": {},
|
||||
"Utilities": {
|
||||
"Utility-Electricity": {},
|
||||
"Utility-Gas": {},
|
||||
"Utility-Refuse Removal": {},
|
||||
"Utility-Water": {}
|
||||
}
|
||||
},
|
||||
"Expenses-Other": {
|
||||
"Bad Debts Written Off": {},
|
||||
"Depreciation": {
|
||||
"Dep-ICT Equipment": {},
|
||||
"Dep-Fixtures & Furniture": {},
|
||||
"Dep-Motor Vehicle": {},
|
||||
"Dep-Office Equipment": {},
|
||||
"Dep-Plant & Machinery": {},
|
||||
"Dep-Renovation": {}
|
||||
},
|
||||
"Donations": {},
|
||||
"Round Off": {},
|
||||
"Tax Expenses": {
|
||||
"Tax Expenses": {}
|
||||
}
|
||||
},
|
||||
"Expenses-Staff": {
|
||||
"Bonuses": {
|
||||
"Bonus-Executive": {},
|
||||
"Bonus-Non Executive": {},
|
||||
"Bonus-Performance": {}
|
||||
},
|
||||
"CPF": {},
|
||||
"Directors Fees": {},
|
||||
"FWL": {},
|
||||
"Incentives": {},
|
||||
"Medical Expenses": {},
|
||||
"Salaries": {
|
||||
"Casual Labour": {},
|
||||
"Salary-Executive": {},
|
||||
"Salary-Non Executive-Full Time": {},
|
||||
"Salary-Non Executive-Part Time": {}
|
||||
},
|
||||
"SDF": {},
|
||||
"Security Expenses": {},
|
||||
"Staff Advertising": {},
|
||||
"Staff Commission Paid": {},
|
||||
"Staff Meals": {},
|
||||
"Staff Training": {},
|
||||
"Staff Transport": {},
|
||||
"Staff Welfare": {}
|
||||
},
|
||||
"root_type": "Expense"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,343 @@
|
||||
{
|
||||
"country_code": "sg",
|
||||
"name": "Singapore F&B Chart of Accounts",
|
||||
"tree": {
|
||||
"Assets": {
|
||||
"Current assets": {
|
||||
"Accounts Receivable": {
|
||||
"Credit Cards": {
|
||||
"AMEX Receivable": {},
|
||||
"CUP Receivale": {},
|
||||
"MC Receivable": {},
|
||||
"NETS Receivable": {},
|
||||
"VISA Receivable": {}
|
||||
},
|
||||
"Debtors": {
|
||||
"account_type": "Receivable"
|
||||
}
|
||||
},
|
||||
"Bank Accounts": {
|
||||
"Paypal Account": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Cash in Hand": {
|
||||
"Cash in Transit": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Petty Cash": {
|
||||
"account_type": "Cash"
|
||||
}
|
||||
},
|
||||
"Loans and Advances-Assets": {
|
||||
"Prepayments": {}
|
||||
},
|
||||
"Securities and Deposits": {
|
||||
"Bank Guarantees": {},
|
||||
"Bank Deposits": {},
|
||||
"Rental Deposits": {}
|
||||
},
|
||||
"Stock Assets": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Tax Assets": {
|
||||
"GST-Input": {}
|
||||
}
|
||||
},
|
||||
"Non-current assets": {
|
||||
"Fixed Assets": {
|
||||
"Accumulated Depreciation": {
|
||||
"AccDep-Equipment-AV": {},
|
||||
"AccDep-Equipment-Bar": {},
|
||||
"AccDep-Equipment-ICT": {},
|
||||
"AccDep-Equipment-Electrical": {},
|
||||
"AccDep-Furniture and Fixtures": {},
|
||||
"AccDep-Equipment-Kitchen": {},
|
||||
"AccDep-Equipment-Lighting": {},
|
||||
"AccDep-Equipment-Office": {},
|
||||
"AccDep-Motor Vehicle": {},
|
||||
"AccDep-Plant and Machinery": {},
|
||||
"AccDep-Renovation": {}
|
||||
},
|
||||
"Equipment-AV": {},
|
||||
"Equipment-Bar": {},
|
||||
"Equipment-ICT": {},
|
||||
"Equipment-Electrical": {},
|
||||
"Furniture and Fixtures": {},
|
||||
"Equipment-Kitchen": {},
|
||||
"Equipment-Lighting": {},
|
||||
"Equipment-Office": {},
|
||||
"Motor Vehicle": {},
|
||||
"Plant and Machinery": {},
|
||||
"Renovation": {}
|
||||
},
|
||||
"Non-Fixed Assets": {
|
||||
"Goodwill": {},
|
||||
"Investments": {
|
||||
"Investments-Associated Company": {},
|
||||
"Investments-Subsidiary": {}
|
||||
}
|
||||
},
|
||||
"Shares": {
|
||||
"Shares-Quoted": {},
|
||||
"Shares-Unquoted": {}
|
||||
}
|
||||
},
|
||||
"Temporary Accunts": {
|
||||
"Temporary Opening": {
|
||||
"account_type": "Temporary"
|
||||
}
|
||||
},
|
||||
"root_type": "Asset"
|
||||
},
|
||||
"Liabilities": {
|
||||
"Current liabilities": {
|
||||
"Accounts Payable": {
|
||||
"Creditors":{
|
||||
"account_type": "Payable"
|
||||
}
|
||||
},
|
||||
"Duties and Taxes": {
|
||||
"account_type": "Tax",
|
||||
"Deferred Tax Liabilities-Current": {},
|
||||
"GST-Output": {},
|
||||
"Income Tax Payable": {}
|
||||
},
|
||||
"Loans-Current": {
|
||||
"Amount Owing to Directors": {},
|
||||
"Bank Overdaft Account": {},
|
||||
"Secured Loans": {},
|
||||
"Unsecured Loans": {}
|
||||
},
|
||||
"Provision and Accruals": {
|
||||
"Accruals": {
|
||||
"Accr-CPF": {},
|
||||
"Accr-Incentives": {},
|
||||
"Accr-OCR Employee Card": {},
|
||||
"Accr-Paypal Credit": {},
|
||||
"Accr-Sundry": {},
|
||||
"Accr-Tips": {},
|
||||
"Accr-Withholding Tax": {}
|
||||
},
|
||||
"Provisions": {
|
||||
"Prov-Audit Fee": {},
|
||||
"Prov-Others": {},
|
||||
"Prov-Tax Fee": {},
|
||||
"Prov-Bonus": {
|
||||
"Prov-Bonus-Executive": {},
|
||||
"Prov-Bonus-Non Executive": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Sponsorship Funds": {},
|
||||
"Stock Liabilities": {
|
||||
"Stock Received But Not Billed": {
|
||||
"account_type": "Stock Received But Not Billed"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Non-current liabilities": {
|
||||
"Deferred Tax Liabilities": {},
|
||||
"Loans-Non Current": {}
|
||||
},
|
||||
"Capital Account": {
|
||||
"Reserves and Surplus": {},
|
||||
"Shareholder Funds": {}
|
||||
},
|
||||
"root_type": "Liability"
|
||||
},
|
||||
"Equity": {
|
||||
"Share Capital": {},
|
||||
"Current Year Earnings": {},
|
||||
"Proposed Dividends": {},
|
||||
"Retained Earnings": {},
|
||||
"root_type": "Equity"
|
||||
},
|
||||
"Income": {
|
||||
"Direct Income": {
|
||||
"Management Income": {},
|
||||
"Sales Income": {
|
||||
"Sales-Food": {},
|
||||
"Sales-Beverage": {},
|
||||
"Sales-Events and Functions": {},
|
||||
"Sales-Merchandise": {},
|
||||
"Sales-Pool Tables": {},
|
||||
"Sales-Tobacco": {},
|
||||
"Sales-Rental": {}
|
||||
}
|
||||
},
|
||||
"Indirect Income": {
|
||||
"Government Grants": {},
|
||||
"Interest Income": {
|
||||
"Current Account Interest Earned": {},
|
||||
"Fixed Deposit Interest Earned": {}
|
||||
},
|
||||
"Other Income": {},
|
||||
"Service Charges": {}
|
||||
},
|
||||
"root_type": "Income"
|
||||
},
|
||||
"Expenses": {
|
||||
"Expenses-Administrative": {
|
||||
"Admin Management Fees": {},
|
||||
"Audit Fees": {},
|
||||
"Auto": {},
|
||||
"Bank charges and interest": {},
|
||||
"Currency Exchange Differences": {},
|
||||
"Insurance": {},
|
||||
"Interest on Loan": {},
|
||||
"Legal and Professional Fees": {},
|
||||
"Loss on Disposal of FA": {},
|
||||
"Postal and Courier Charges": {},
|
||||
"Printing and Stationery": {},
|
||||
"Secretarial Fees": {},
|
||||
"Tax Agent Fees": {}
|
||||
},
|
||||
"Expenses-Direct": {
|
||||
"Cost of Goods Sold": {
|
||||
"account_type": "Cost of Goods Sold"
|
||||
},
|
||||
"Cost of Sales": {
|
||||
"COS-Food": {},
|
||||
"COS-Beverage": {},
|
||||
"COS-Tobacco": {},
|
||||
"COS-Events and Functions": {},
|
||||
"COS-Merchandise": {}
|
||||
},
|
||||
"Expenses Included in Valuation": {
|
||||
"account_type": "Expenses Included In Valuation"
|
||||
},
|
||||
"Stock Adjustment": {
|
||||
"account_type": "Stock Adjustment"
|
||||
}
|
||||
},
|
||||
"Expenses-Marketing": {
|
||||
"Advertising and Promotion": {},
|
||||
"Graphic Design Fees": {},
|
||||
"Internet Marketing": {
|
||||
"Marketing-Social Media": {},
|
||||
"Marketing-Website": {}
|
||||
}
|
||||
},
|
||||
"Expenses-Operating": {
|
||||
"Cleaning Costs": {
|
||||
"Cleaning-Kitchen": {},
|
||||
"Cleaning-Laundry": {},
|
||||
"Cleaning-Outlet": {}
|
||||
},
|
||||
"Commission Charges": {
|
||||
"Comm-Credit Card": {},
|
||||
"Comm-NETS": {},
|
||||
"Comm-Paypal": {}
|
||||
},
|
||||
"Communication Costs": {
|
||||
"Internet Connection": {},
|
||||
"Telephone Costs": {}
|
||||
},
|
||||
"Disposals": {
|
||||
"Disposals-Food": {},
|
||||
"Disposals-Beverage": {},
|
||||
"Disposals-Merchandise": {},
|
||||
"Disposals-Others": {}
|
||||
},
|
||||
"Entertainment Expenses": {
|
||||
"DJ Costs": {},
|
||||
"Live Band Costs": {},
|
||||
"Recorded Music Costs": {}
|
||||
},
|
||||
"FoC Accounts": {
|
||||
"FoC-ENT": {},
|
||||
"FoC-OC": {}
|
||||
},
|
||||
"General Expenses": {},
|
||||
"Landscaping Costs": {},
|
||||
"Licence Fees": {},
|
||||
"Operational Supplies": {
|
||||
"Supplies-Bar": {},
|
||||
"Supplies-Guest": {},
|
||||
"Supplies-Kitchen": {},
|
||||
"Supplies-Restaurant": {},
|
||||
"Supplies-Stewarding": {}
|
||||
},
|
||||
"Rental Costs": {
|
||||
"Rental-Premises": {},
|
||||
"Rental-Equipment": {},
|
||||
"Rental-Storage": {}
|
||||
},
|
||||
"Repairs and Maintenance": {
|
||||
"R&M-ICT": {},
|
||||
"R&M-AV": {},
|
||||
"R&M-Building": {},
|
||||
"R&M-Electrical & Lighting": {},
|
||||
"R&M-Fixtures & Furniture": {},
|
||||
"R&M-Kitchen & Bar": {},
|
||||
"R&M-Office": {},
|
||||
"R&M-Plant & Machinery": {}
|
||||
},
|
||||
"Service Fees": {},
|
||||
"Subscription Fees": {
|
||||
"Publication Subscriptions": {},
|
||||
"TV Subscriptions": {}
|
||||
},
|
||||
"Travel Expenses": {},
|
||||
"Utilities": {
|
||||
"Utility-Electricity": {},
|
||||
"Utility-Gas": {},
|
||||
"Utility-Refuse Removal": {},
|
||||
"Utility-Water": {}
|
||||
}
|
||||
},
|
||||
"Expenses-Other": {
|
||||
"Bad Debts Written Off": {},
|
||||
"Depreciation": {
|
||||
"Dep-AV Equipment": {},
|
||||
"Dep-Bar Equipment": {},
|
||||
"Dep-ICT Equipment": {},
|
||||
"Dep-Electrical Equipment": {},
|
||||
"Dep-Fixtures & Furniture": {},
|
||||
"Dep-Kitchen Equipment": {},
|
||||
"Dep-Lighting Equipment": {},
|
||||
"Dep-Motor Vehicle": {},
|
||||
"Dep-Office Equipment": {},
|
||||
"Dep-Plant & Machinery": {},
|
||||
"Dep-Renovation": {}
|
||||
},
|
||||
"Donations": {},
|
||||
"Round Off": {},
|
||||
"Tax Expenses": {
|
||||
"Tax Expenses": {}
|
||||
}
|
||||
},
|
||||
"Expenses-Staff": {
|
||||
"Bonuses": {
|
||||
"Bonus-Executive": {},
|
||||
"Bonus-Non Executive": {},
|
||||
"Bonus-Performance": {}
|
||||
},
|
||||
"CPF": {},
|
||||
"Directors Fees": {},
|
||||
"FWL": {},
|
||||
"Incentives": {},
|
||||
"Medical Expenses": {},
|
||||
"Salaries": {
|
||||
"Casual Labour": {},
|
||||
"Salary-Executive": {},
|
||||
"Salary-Non Executive-Full Time": {},
|
||||
"Salary-Non Executive-Part Time": {}
|
||||
},
|
||||
"SDF": {},
|
||||
"Security Expenses": {},
|
||||
"Staff Advertising": {},
|
||||
"Staff Commission Paid": {},
|
||||
"Staff Meals": {},
|
||||
"Staff Training": {},
|
||||
"Staff Transport": {},
|
||||
"Staff Uniforms": {},
|
||||
"Staff Welfare": {}
|
||||
},
|
||||
"root_type": "Expense"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,14 +20,15 @@ class FiscalYear(Document):
|
||||
msgprint(_("{0} is now the default Fiscal Year. Please refresh your browser for the change to take effect.").format(self.name))
|
||||
|
||||
def validate(self):
|
||||
year_start_end_dates = frappe.db.sql("""select year_start_date, year_end_date
|
||||
from `tabFiscal Year` where name=%s""", (self.name))
|
||||
|
||||
self.validate_dates()
|
||||
|
||||
if year_start_end_dates:
|
||||
if getdate(self.year_start_date) != year_start_end_dates[0][0] or getdate(self.year_end_date) != year_start_end_dates[0][1]:
|
||||
frappe.throw(_("Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved."))
|
||||
if not self.is_new():
|
||||
year_start_end_dates = frappe.db.sql("""select year_start_date, year_end_date
|
||||
from `tabFiscal Year` where name=%s""", (self.name))
|
||||
|
||||
if year_start_end_dates:
|
||||
if getdate(self.year_start_date) != year_start_end_dates[0][0] or getdate(self.year_end_date) != year_start_end_dates[0][1]:
|
||||
frappe.throw(_("Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved."))
|
||||
|
||||
def validate_dates(self):
|
||||
if getdate(self.year_start_date) > getdate(self.year_end_date):
|
||||
@@ -63,6 +64,6 @@ def auto_create_fiscal_year():
|
||||
end_year = cstr(new_fy.year_end_date.year)
|
||||
new_fy.year = start_year if start_year==end_year else (start_year + "-" + end_year)
|
||||
|
||||
new_fy.insert()
|
||||
new_fy.insert(ignore_permissions=True)
|
||||
except frappe.NameError:
|
||||
pass
|
||||
|
||||
@@ -347,6 +347,7 @@ frappe.ui.form.on("Journal Entry Account", {
|
||||
callback: function(r) {
|
||||
if(r.message) {
|
||||
$.extend(d, r.message);
|
||||
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, dt, dn);
|
||||
refresh_field('accounts');
|
||||
}
|
||||
}
|
||||
@@ -355,11 +356,11 @@ frappe.ui.form.on("Journal Entry Account", {
|
||||
},
|
||||
|
||||
debit_in_account_currency: function(frm, cdt, cdn) {
|
||||
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
|
||||
erpnext.journal_entry.set_exchange_rate(frm, cdt, cdn);
|
||||
},
|
||||
|
||||
credit_in_account_currency: function(frm, cdt, cdn) {
|
||||
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
|
||||
erpnext.journal_entry.set_exchange_rate(frm, cdt, cdn);
|
||||
},
|
||||
|
||||
debit: function(frm, dt, dn) {
|
||||
@@ -368,6 +369,17 @@ frappe.ui.form.on("Journal Entry Account", {
|
||||
|
||||
credit: function(frm, dt, dn) {
|
||||
cur_frm.cscript.update_totals(frm.doc);
|
||||
},
|
||||
|
||||
exchange_rate: function(frm, cdt, cdn) {
|
||||
var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
|
||||
var row = locals[cdt][cdn];
|
||||
|
||||
if(row.account_currency == company_currency || !frm.doc.multi_currency) {
|
||||
frappe.model.set_value(cdt, cdn, "exchange_rate", 1);
|
||||
}
|
||||
|
||||
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
|
||||
}
|
||||
})
|
||||
|
||||
@@ -395,8 +407,6 @@ $.extend(erpnext.journal_entry, {
|
||||
},
|
||||
|
||||
set_debit_credit_in_company_currency: function(frm, cdt, cdn) {
|
||||
erpnext.journal_entry.set_exchange_rate(frm, cdt, cdn);
|
||||
|
||||
var row = locals[cdt][cdn];
|
||||
|
||||
frappe.model.set_value(cdt, cdn, "debit",
|
||||
@@ -413,7 +423,8 @@ $.extend(erpnext.journal_entry, {
|
||||
var row = locals[cdt][cdn];
|
||||
|
||||
if(row.account_currency == company_currency || !frm.doc.multi_currency) {
|
||||
frappe.model.set_value(cdt, cdn, "exchange_rate", 1);
|
||||
row.exchange_rate = 1;
|
||||
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
|
||||
} else if (!row.exchange_rate || row.exchange_rate == 1 || row.account_type == "Bank") {
|
||||
frappe.call({
|
||||
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_exchange_rate",
|
||||
@@ -429,11 +440,15 @@ $.extend(erpnext.journal_entry, {
|
||||
},
|
||||
callback: function(r) {
|
||||
if(r.message) {
|
||||
frappe.model.set_value(cdt, cdn, "exchange_rate", r.message);
|
||||
row.exchange_rate = r.message;
|
||||
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
|
||||
}
|
||||
refresh_field("exchange_rate", cdn, "accounts");
|
||||
},
|
||||
|
||||
quick_entry: function(frm) {
|
||||
|
||||
@@ -105,6 +105,12 @@ class JournalEntry(AccountsController):
|
||||
elif d.reference_type in ("Sales Order", "Purchase Order") and d.is_advance != "Yes":
|
||||
frappe.throw(_("Row {0}: Payment against Sales/Purchase Order should always be marked as advance").format(d.idx))
|
||||
|
||||
if d.is_advance == "Yes":
|
||||
if d.party_type == 'Customer' and flt(d.debit) > 0:
|
||||
frappe.throw(_("Row {0}: Advance against Customer must be credit").format(d.idx))
|
||||
elif d.party_type == 'Supplier' and flt(d.credit) > 0:
|
||||
frappe.throw(_("Row {0}: Advance against Supplier must be debit").format(d.idx))
|
||||
|
||||
def validate_against_jv(self):
|
||||
for d in self.get('accounts'):
|
||||
if d.reference_type=="Journal Entry":
|
||||
@@ -274,10 +280,14 @@ class JournalEntry(AccountsController):
|
||||
alternate_currency = []
|
||||
for d in self.get("accounts"):
|
||||
account = frappe.db.get_value("Account", d.account, ["account_currency", "account_type"], as_dict=1)
|
||||
d.account_currency = account.account_currency or self.company_currency
|
||||
d.account_type = account.account_type
|
||||
if account:
|
||||
d.account_currency = account.account_currency
|
||||
d.account_type = account.account_type
|
||||
|
||||
if d.account_currency!=self.company_currency and d.account_currency not in alternate_currency:
|
||||
if not d.account_currency:
|
||||
d.account_currency = self.company_currency
|
||||
|
||||
if d.account_currency != self.company_currency and d.account_currency not in alternate_currency:
|
||||
alternate_currency.append(d.account_currency)
|
||||
|
||||
if alternate_currency:
|
||||
|
||||
@@ -47,6 +47,11 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
|
||||
|
||||
refresh: function() {
|
||||
this.frm.disable_save();
|
||||
this.toggle_primary_action();
|
||||
},
|
||||
|
||||
onload_post_render: function() {
|
||||
this.toggle_primary_action();
|
||||
},
|
||||
|
||||
party: function() {
|
||||
@@ -75,6 +80,7 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
|
||||
method: 'get_unreconciled_entries',
|
||||
callback: function(r, rt) {
|
||||
me.set_invoice_options();
|
||||
me.toggle_primary_action();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -87,10 +93,11 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
|
||||
method: 'reconcile',
|
||||
callback: function(r, rt) {
|
||||
me.set_invoice_options();
|
||||
me.toggle_primary_action();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
set_invoice_options: function() {
|
||||
var invoices = [];
|
||||
|
||||
@@ -107,6 +114,20 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
|
||||
});
|
||||
|
||||
refresh_field("payments");
|
||||
},
|
||||
|
||||
toggle_primary_action: function() {
|
||||
if ((this.frm.doc.payments || []).length) {
|
||||
this.frm.fields_dict.reconcile.$input
|
||||
&& this.frm.fields_dict.reconcile.$input.addClass("btn-primary");
|
||||
this.frm.fields_dict.get_unreconciled_entries.$input
|
||||
&& this.frm.fields_dict.get_unreconciled_entries.$input.removeClass("btn-primary");
|
||||
} else {
|
||||
this.frm.fields_dict.reconcile.$input
|
||||
&& this.frm.fields_dict.reconcile.$input.removeClass("btn-primary");
|
||||
this.frm.fields_dict.get_unreconciled_entries.$input
|
||||
&& this.frm.fields_dict.get_unreconciled_entries.$input.addClass("btn-primary");
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -19,10 +19,12 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Company",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -41,10 +43,12 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Party Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "DocType",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -64,10 +68,12 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Party",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "party_type",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -86,11 +92,13 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Receivable / Payable Account",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Account",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -109,10 +117,12 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Bank / Cash Account",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Account",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -131,9 +141,11 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -151,10 +163,12 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "From Date",
|
||||
"label": "From Invoice Date",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -172,10 +186,12 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "To Date",
|
||||
"label": "To Invoice Date",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -193,10 +209,12 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Minimum Amount",
|
||||
"label": "Minimum Invoice Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -214,10 +232,12 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Maximum Amount",
|
||||
"label": "Maximum Invoice Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -236,9 +256,11 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Get Unreconciled Entries",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -257,9 +279,11 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Unreconciled Payment Details",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -278,10 +302,12 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Payments",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Payment Reconciliation Payment",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -300,9 +326,11 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Reconcile",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -321,9 +349,11 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Invoice/Journal Entry Details",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -342,10 +372,12 @@
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Invoices",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Payment Reconciliation Invoice",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -357,12 +389,15 @@
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 1,
|
||||
"icon": "icon-resize-horizontal",
|
||||
"idx": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 1,
|
||||
"istable": 0,
|
||||
"modified": "2015-09-21 03:41:24.672227",
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2016-01-04 02:26:58.807921",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Payment Reconciliation",
|
||||
|
||||
@@ -18,8 +18,6 @@ class PaymentReconciliation(Document):
|
||||
dr_or_cr = "credit_in_account_currency" if self.party_type == "Customer" \
|
||||
else "debit_in_account_currency"
|
||||
|
||||
cond = self.check_condition()
|
||||
|
||||
bank_account_condition = "t2.against_account like %(bank_cash_account)s" \
|
||||
if self.bank_cash_account else "1=1"
|
||||
|
||||
@@ -34,7 +32,6 @@ class PaymentReconciliation(Document):
|
||||
and t2.party_type = %(party_type)s and t2.party = %(party)s
|
||||
and t2.account = %(account)s and {dr_or_cr} > 0
|
||||
and (t2.reference_type is null or t2.reference_type in ('', 'Sales Order', 'Purchase Order'))
|
||||
{cond}
|
||||
and (CASE
|
||||
WHEN t1.voucher_type in ('Debit Note', 'Credit Note')
|
||||
THEN 1=1
|
||||
@@ -42,7 +39,6 @@ class PaymentReconciliation(Document):
|
||||
END)
|
||||
""".format(**{
|
||||
"dr_or_cr": dr_or_cr,
|
||||
"cond": cond,
|
||||
"bank_account_condition": bank_account_condition,
|
||||
}), {
|
||||
"party_type": self.party_type,
|
||||
@@ -158,8 +154,8 @@ class PaymentReconciliation(Document):
|
||||
frappe.throw(_("Please select Allocated Amount, Invoice Type and Invoice Number in atleast one row"))
|
||||
|
||||
def check_condition(self):
|
||||
cond = " and posting_date >= {0}".format(frappe.db.escape(self.from_date)) if self.from_date else ""
|
||||
cond += " and posting_date <= {0}".format(frappe.db.escape(self.to_date)) if self.to_date else ""
|
||||
cond = " and posting_date >= '{0}'".format(frappe.db.escape(self.from_date)) if self.from_date else ""
|
||||
cond += " and posting_date <= '{0}'".format(frappe.db.escape(self.to_date)) if self.to_date else ""
|
||||
|
||||
if self.party_type == "Customer":
|
||||
dr_or_cr = "debit_in_account_currency"
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"description": "The account head under Liability, in which Profit/Loss will be booked",
|
||||
"description": "The account head under Liability or Equity, in which Profit/Loss will be booked",
|
||||
"fieldname": "closing_account_head",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
|
||||
@@ -1153,6 +1153,31 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "base_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Additional Discount Amount (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -1176,6 +1201,30 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "additional_discount_percentage",
|
||||
"fieldtype": "Float",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Additional Discount Percentage",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -1201,31 +1250,6 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "base_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Additional Discount Amount (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -2463,7 +2487,7 @@
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2015-12-01 00:49:02.736868",
|
||||
"modified": "2015-12-17 16:18:58.177334",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Purchase Invoice",
|
||||
|
||||
@@ -11,6 +11,7 @@ import frappe.defaults
|
||||
from erpnext.controllers.buying_controller import BuyingController
|
||||
from erpnext.accounts.party import get_party_account, get_due_date
|
||||
from erpnext.accounts.utils import get_account_currency
|
||||
from erpnext.stock.doctype.purchase_receipt.purchase_receipt import update_billed_amount_based_on_po
|
||||
|
||||
form_grid_templates = {
|
||||
"items": "templates/form_grid/item_grid.html"
|
||||
@@ -150,14 +151,14 @@ class PurchaseInvoice(BuyingController):
|
||||
against_accounts = []
|
||||
stock_items = self.get_stock_items()
|
||||
for item in self.get("items"):
|
||||
# in case of auto inventory accounting,
|
||||
# in case of auto inventory accounting,
|
||||
# against expense account is always "Stock Received But Not Billed"
|
||||
# for a stock item and if not epening entry and not drop-ship entry
|
||||
|
||||
|
||||
if auto_accounting_for_stock and item.item_code in stock_items \
|
||||
and self.is_opening == 'No' and (not item.po_detail or
|
||||
and self.is_opening == 'No' and (not item.po_detail or
|
||||
not frappe.db.get_value("Purchase Order Item", item.po_detail, "delivered_by_supplier")):
|
||||
|
||||
|
||||
item.expense_account = stock_not_billed_account
|
||||
item.cost_center = None
|
||||
|
||||
@@ -246,6 +247,7 @@ class PurchaseInvoice(BuyingController):
|
||||
self.update_against_document_in_jv()
|
||||
self.update_prevdoc_status()
|
||||
self.update_billing_status_for_zero_amount_refdoc("Purchase Order")
|
||||
self.update_billing_status_in_pr()
|
||||
|
||||
self.update_project()
|
||||
|
||||
@@ -407,6 +409,8 @@ class PurchaseInvoice(BuyingController):
|
||||
|
||||
self.update_prevdoc_status()
|
||||
self.update_billing_status_for_zero_amount_refdoc("Purchase Order")
|
||||
self.update_billing_status_in_pr()
|
||||
|
||||
self.make_gl_entries_on_cancel()
|
||||
self.update_project()
|
||||
|
||||
@@ -431,6 +435,21 @@ class PurchaseInvoice(BuyingController):
|
||||
if pi:
|
||||
frappe.throw("Supplier Invoice No exists in Purchase Invoice {0}".format(pi))
|
||||
|
||||
def update_billing_status_in_pr(self, update_modified=True):
|
||||
updated_pr = []
|
||||
for d in self.get("items"):
|
||||
if d.pr_detail:
|
||||
billed_amt = frappe.db.sql("""select sum(amount) from `tabPurchase Invoice Item`
|
||||
where pr_detail=%s and docstatus=1""", d.pr_detail)
|
||||
billed_amt = billed_amt and billed_amt[0][0] or 0
|
||||
frappe.db.set_value("Purchase Receipt Item", d.pr_detail, "billed_amt", billed_amt, update_modified=update_modified)
|
||||
updated_pr.append(d.purchase_receipt)
|
||||
elif d.po_detail:
|
||||
updated_pr += update_billed_amount_based_on_po(d.po_detail, update_modified)
|
||||
|
||||
for pr in set(updated_pr):
|
||||
frappe.get_doc("Purchase Receipt", pr).update_billing_percentage(update_modified=update_modified)
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_expense_account(doctype, txt, searchfield, start, page_len, filters):
|
||||
from erpnext.controllers.queries import get_match_cond
|
||||
|
||||
@@ -12,6 +12,7 @@ from frappe.model.mapper import get_mapped_doc
|
||||
|
||||
from erpnext.controllers.selling_controller import SellingController
|
||||
from erpnext.accounts.utils import get_account_currency
|
||||
from erpnext.stock.doctype.delivery_note.delivery_note import update_billed_amount_based_on_so
|
||||
|
||||
form_grid_templates = {
|
||||
"items": "templates/form_grid/item_grid.html"
|
||||
@@ -98,6 +99,7 @@ class SalesInvoice(SellingController):
|
||||
|
||||
self.update_status_updater_args()
|
||||
self.update_prevdoc_status()
|
||||
self.update_billing_status_in_dn()
|
||||
|
||||
# this sequence because outstanding may get -ve
|
||||
self.make_gl_entries()
|
||||
@@ -111,6 +113,7 @@ class SalesInvoice(SellingController):
|
||||
|
||||
self.update_time_log_batch(self.name)
|
||||
|
||||
|
||||
def before_cancel(self):
|
||||
self.update_time_log_batch(None)
|
||||
|
||||
@@ -129,6 +132,7 @@ class SalesInvoice(SellingController):
|
||||
|
||||
self.update_status_updater_args()
|
||||
self.update_prevdoc_status()
|
||||
self.update_billing_status_in_dn()
|
||||
|
||||
if not self.is_return:
|
||||
self.update_billing_status_for_zero_amount_refdoc("Sales Order")
|
||||
@@ -296,6 +300,9 @@ class SalesInvoice(SellingController):
|
||||
account = frappe.db.get_value("Account", self.debit_to,
|
||||
["account_type", "report_type", "account_currency"], as_dict=True)
|
||||
|
||||
if not account:
|
||||
frappe.throw(_("Debit To is required"))
|
||||
|
||||
if account.report_type != "Balance Sheet":
|
||||
frappe.throw(_("Debit To account must be a Balance Sheet account"))
|
||||
|
||||
@@ -381,7 +388,7 @@ class SalesInvoice(SellingController):
|
||||
|
||||
def validate_warehouse(self):
|
||||
super(SalesInvoice, self).validate_warehouse()
|
||||
|
||||
|
||||
for d in self.get('items'):
|
||||
if not d.warehouse:
|
||||
frappe.throw(_("Warehouse required at Row No {0}").format(d.idx))
|
||||
@@ -410,7 +417,7 @@ class SalesInvoice(SellingController):
|
||||
if self.c_form_applicable == 'Yes' and self.c_form_no:
|
||||
msgprint(_("Please remove this Invoice {0} from C-Form {1}")
|
||||
.format(self.name, self.c_form_no), raise_exception = 1)
|
||||
|
||||
|
||||
def validate_dropship_item(self):
|
||||
for item in self.items:
|
||||
if item.sales_order:
|
||||
@@ -630,6 +637,21 @@ class SalesInvoice(SellingController):
|
||||
}, write_off_account_currency)
|
||||
)
|
||||
|
||||
def update_billing_status_in_dn(self, update_modified=True):
|
||||
updated_delivery_notes = []
|
||||
for d in self.get("items"):
|
||||
if d.dn_detail:
|
||||
billed_amt = frappe.db.sql("""select sum(amount) from `tabSales Invoice Item`
|
||||
where dn_detail=%s and docstatus=1""", d.dn_detail)
|
||||
billed_amt = billed_amt and billed_amt[0][0] or 0
|
||||
frappe.db.set_value("Delivery Note Item", d.dn_detail, "billed_amt", billed_amt, update_modified=update_modified)
|
||||
updated_delivery_notes.append(d.delivery_note)
|
||||
elif d.so_detail:
|
||||
updated_delivery_notes += update_billed_amount_based_on_so(d.so_detail, update_modified)
|
||||
|
||||
for dn in set(updated_delivery_notes):
|
||||
frappe.get_doc("Delivery Note", dn).update_billing_percentage(update_modified=update_modified)
|
||||
|
||||
def get_list_context(context=None):
|
||||
from erpnext.controllers.website_list_for_contact import get_list_context
|
||||
list_context = get_list_context(context)
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -48,6 +49,7 @@
|
||||
"options": "Item",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -69,6 +71,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -93,6 +96,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -115,6 +119,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -138,6 +143,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -162,6 +168,7 @@
|
||||
"oldfieldtype": "Text",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "200px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
@@ -186,6 +193,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -210,6 +218,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -233,6 +242,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -255,6 +265,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -279,6 +290,7 @@
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -304,6 +316,7 @@
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -329,6 +342,7 @@
|
||||
"oldfieldtype": "Float",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -350,6 +364,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -373,6 +388,7 @@
|
||||
"options": "UOM",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -398,6 +414,7 @@
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -419,6 +436,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -444,6 +462,7 @@
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -469,6 +488,7 @@
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -490,6 +510,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -515,6 +536,7 @@
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -540,6 +562,7 @@
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -563,6 +586,7 @@
|
||||
"options": "Pricing Rule",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -585,6 +609,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -609,6 +634,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -633,6 +659,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -655,6 +682,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -679,6 +707,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -703,6 +732,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -727,6 +757,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -750,6 +781,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -772,6 +804,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -797,6 +830,7 @@
|
||||
"options": "Account",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "120px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
@@ -822,6 +856,7 @@
|
||||
"options": "Account",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -844,6 +879,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -870,6 +906,7 @@
|
||||
"options": "Cost Center",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "120px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
@@ -895,6 +932,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -920,6 +958,7 @@
|
||||
"options": "Warehouse",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -944,6 +983,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -968,6 +1008,7 @@
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -991,6 +1032,7 @@
|
||||
"options": "Batch",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1017,6 +1059,7 @@
|
||||
"options": "Item Group",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1041,6 +1084,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1065,6 +1109,7 @@
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1086,6 +1131,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1109,6 +1155,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "150px",
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
@@ -1135,6 +1182,7 @@
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1158,6 +1206,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1181,6 +1230,7 @@
|
||||
"options": "Time Log Batch",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1197,7 +1247,7 @@
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 1,
|
||||
"in_list_view": 0,
|
||||
"label": "Sales Order",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
@@ -1206,6 +1256,7 @@
|
||||
"options": "Sales Order",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1230,6 +1281,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1252,6 +1304,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1277,6 +1330,7 @@
|
||||
"options": "Delivery Note",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1301,6 +1355,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1325,6 +1380,7 @@
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1347,6 +1403,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1369,6 +1426,7 @@
|
||||
"no_copy": 1,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 1,
|
||||
"reqd": 0,
|
||||
@@ -1386,7 +1444,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-16 06:29:56.335017",
|
||||
"modified": "2016-01-06 02:23:06.432442",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Sales Invoice Item",
|
||||
|
||||
@@ -66,7 +66,7 @@ frappe.pages["Accounts Browser"].on_page_load = function(wrapper){
|
||||
$.each(r.message, function(i, v) {
|
||||
$('<option>').html(v).attr('value', v).appendTo(wrapper.$company_select);
|
||||
});
|
||||
wrapper.$company_select.val(frappe.defaults.get_user_default("company") || r.message[0]).change();
|
||||
wrapper.$company_select.val(frappe.defaults.get_user_default("Company") || r.message[0]).change();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -146,7 +146,7 @@ erpnext.AccountsChart = Class.extend({
|
||||
label: __("Rename"),
|
||||
click: function(node) {
|
||||
frappe.model.rename_doc(me.ctype, node.label, function(new_name) {
|
||||
node.reload();
|
||||
node.reload_parent();
|
||||
});
|
||||
},
|
||||
btnClass: "hidden-xs"
|
||||
@@ -166,8 +166,8 @@ erpnext.AccountsChart = Class.extend({
|
||||
var dr_or_cr = node.data.balance < 0 ? "Cr" : "Dr";
|
||||
if (me.ctype == 'Account' && node.data && node.data.balance!==undefined) {
|
||||
$('<span class="balance-area pull-right text-muted small">'
|
||||
+ (node.data.balance_in_account_currency ?
|
||||
(format_currency(Math.abs(node.data.balance_in_account_currency),
|
||||
+ (node.data.balance_in_account_currency ?
|
||||
(format_currency(Math.abs(node.data.balance_in_account_currency),
|
||||
node.data.account_currency) + " / ") : "")
|
||||
+ format_currency(Math.abs(node.data.balance), node.data.company_currency)
|
||||
+ " " + dr_or_cr
|
||||
@@ -219,7 +219,7 @@ erpnext.AccountsChart = Class.extend({
|
||||
description: __("Optional. This setting will be used to filter in various transactions.") },
|
||||
{fieldtype:'Float', fieldname:'tax_rate', label:__('Tax Rate')},
|
||||
{fieldtype:'Link', fieldname:'warehouse', label:__('Warehouse'), options:"Warehouse"},
|
||||
{fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency",
|
||||
{fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency",
|
||||
description: __("Optional. Sets company's default currency, if not specified.")}
|
||||
]
|
||||
})
|
||||
@@ -243,7 +243,7 @@ erpnext.AccountsChart = Class.extend({
|
||||
$(fd.tax_rate.wrapper).toggle(fd.account_type.get_value()==='Tax');
|
||||
$(fd.warehouse.wrapper).toggle(fd.account_type.get_value()==='Warehouse');
|
||||
})
|
||||
|
||||
|
||||
// root type if root
|
||||
$(fd.root_type.wrapper).toggle(node.root);
|
||||
|
||||
@@ -261,7 +261,7 @@ erpnext.AccountsChart = Class.extend({
|
||||
var node = me.tree.get_selected_node();
|
||||
v.parent_account = node.label;
|
||||
v.company = me.company;
|
||||
|
||||
|
||||
if(node.root) {
|
||||
v.is_root = true;
|
||||
v.parent_account = null;
|
||||
@@ -278,7 +278,7 @@ erpnext.AccountsChart = Class.extend({
|
||||
if(node.expanded) {
|
||||
node.toggle_node();
|
||||
}
|
||||
node.reload();
|
||||
node.load();
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -324,7 +324,7 @@ erpnext.AccountsChart = Class.extend({
|
||||
if(node.expanded) {
|
||||
node.toggle_node();
|
||||
}
|
||||
node.reload();
|
||||
node.load();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -18,29 +18,31 @@ def get_companies():
|
||||
def get_children():
|
||||
args = frappe.local.form_dict
|
||||
ctype, company = args['ctype'], args['comp']
|
||||
fieldname = frappe.db.escape(ctype.lower().replace(' ','_'))
|
||||
doctype = frappe.db.escape(ctype)
|
||||
|
||||
# root
|
||||
if args['parent'] in ("Accounts", "Cost Centers"):
|
||||
select_cond = ", root_type, report_type, account_currency" if ctype=="Account" else ""
|
||||
fields = ", root_type, report_type, account_currency" if ctype=="Account" else ""
|
||||
acc = frappe.db.sql(""" select
|
||||
name as value, is_group as expandable %s
|
||||
from `tab%s`
|
||||
where ifnull(`parent_%s`,'') = ''
|
||||
name as value, is_group as expandable {fields}
|
||||
from `tab{doctype}`
|
||||
where ifnull(`parent_{fieldname}`,'') = ''
|
||||
and `company` = %s and docstatus<2
|
||||
order by name""" % (select_cond, frappe.db.escape(ctype), frappe.db.escape(ctype.lower().replace(' ','_')), '%s'),
|
||||
order by name""".format(fields=fields, fieldname = fieldname, doctype=doctype),
|
||||
company, as_dict=1)
|
||||
|
||||
if args["parent"]=="Accounts":
|
||||
sort_root_accounts(acc)
|
||||
else:
|
||||
# other
|
||||
select_cond = ", account_currency" if ctype=="Account" else ""
|
||||
fields = ", account_currency" if ctype=="Account" else ""
|
||||
acc = frappe.db.sql("""select
|
||||
name as value, is_group as expandable %s
|
||||
from `tab%s`
|
||||
where ifnull(`parent_%s`,'') = %s
|
||||
name as value, is_group as expandable, parent_{fieldname} as parent {fields}
|
||||
from `tab{doctype}`
|
||||
where ifnull(`parent_{fieldname}`,'') = %s
|
||||
and docstatus<2
|
||||
order by name""" % (select_cond, frappe.db.escape(ctype), frappe.db.escape(ctype.lower().replace(' ','_')), '%s'),
|
||||
order by name""".format(fields=fields, fieldname=fieldname, doctype=doctype),
|
||||
args['parent'], as_dict=1)
|
||||
|
||||
if ctype == 'Account':
|
||||
@@ -48,7 +50,7 @@ def get_children():
|
||||
for each in acc:
|
||||
each["company_currency"] = company_currency
|
||||
each["balance"] = flt(get_balance_on(each.get("value"), in_account_currency=False))
|
||||
|
||||
|
||||
if each.account_currency != company_currency:
|
||||
each["balance_in_account_currency"] = flt(get_balance_on(each.get("value")))
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ frappe.query_reports["Accounts Payable"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company")
|
||||
"default": frappe.defaults.get_user_default("Company")
|
||||
},
|
||||
{
|
||||
"fieldname":"supplier",
|
||||
|
||||
@@ -8,7 +8,7 @@ frappe.query_reports["Accounts Payable Summary"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company")
|
||||
"default": frappe.defaults.get_user_default("Company")
|
||||
},
|
||||
{
|
||||
"fieldname":"supplier",
|
||||
|
||||
@@ -8,7 +8,7 @@ frappe.query_reports["Accounts Receivable"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company")
|
||||
"default": frappe.defaults.get_user_default("Company")
|
||||
},
|
||||
{
|
||||
"fieldname":"customer",
|
||||
|
||||
@@ -68,6 +68,7 @@ class ReceivablePayableReport(object):
|
||||
"label": _("Currency"),
|
||||
"fieldtype": "Data",
|
||||
"width": 100,
|
||||
"hidden": 1
|
||||
},
|
||||
_("Remarks") + "::200"
|
||||
]
|
||||
|
||||
@@ -8,7 +8,7 @@ frappe.query_reports["Accounts Receivable Summary"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company")
|
||||
"default": frappe.defaults.get_user_default("Company")
|
||||
},
|
||||
{
|
||||
"fieldname":"customer",
|
||||
|
||||
@@ -13,7 +13,8 @@ def execute(filters=None):
|
||||
asset = get_data(filters.company, "Asset", "Debit", period_list)
|
||||
liability = get_data(filters.company, "Liability", "Credit", period_list)
|
||||
equity = get_data(filters.company, "Equity", "Credit", period_list)
|
||||
provisional_profit_loss = get_provisional_profit_loss(asset, liability, equity, period_list)
|
||||
provisional_profit_loss = get_provisional_profit_loss(asset, liability, equity,
|
||||
period_list, filters.company)
|
||||
|
||||
data = []
|
||||
data.extend(asset or [])
|
||||
@@ -26,12 +27,13 @@ def execute(filters=None):
|
||||
|
||||
return columns, data
|
||||
|
||||
def get_provisional_profit_loss(asset, liability, equity, period_list):
|
||||
def get_provisional_profit_loss(asset, liability, equity, period_list, company):
|
||||
if asset and (liability or equity):
|
||||
provisional_profit_loss = {
|
||||
"account_name": "'" + _("Provisional Profit / Loss (Credit)") + "'",
|
||||
"account": None,
|
||||
"warn_if_negative": True
|
||||
"warn_if_negative": True,
|
||||
"currency": frappe.db.get_value("Company", company, "default_currency")
|
||||
}
|
||||
|
||||
has_value = False
|
||||
|
||||
@@ -14,7 +14,12 @@ frappe.query_reports["Budget Variance Report"] = {
|
||||
fieldname: "period",
|
||||
label: __("Period"),
|
||||
fieldtype: "Select",
|
||||
options: "Monthly\nQuarterly\nHalf-Yearly\nYearly",
|
||||
options: [
|
||||
{ "value": "Monthly", "label": __("Monthly") },
|
||||
{ "value": "Quarterly", "label": __("Quarterly") },
|
||||
{ "value": "Half-Yearly", "label": __("Half-Yearly") },
|
||||
{ "value": "Yearly", "label": __("Yearly") }
|
||||
],
|
||||
default: "Monthly"
|
||||
},
|
||||
{
|
||||
@@ -22,7 +27,7 @@ frappe.query_reports["Budget Variance Report"] = {
|
||||
label: __("Company"),
|
||||
fieldtype: "Link",
|
||||
options: "Company",
|
||||
default: frappe.defaults.get_user_default("company")
|
||||
default: frappe.defaults.get_user_default("Company")
|
||||
},
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
0
erpnext/accounts/report/cash_flow/__init__.py
Normal file
6
erpnext/accounts/report/cash_flow/cash_flow.js
Normal file
@@ -0,0 +1,6 @@
|
||||
// Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.require("assets/erpnext/js/financial_statements.js");
|
||||
|
||||
frappe.query_reports["Cash Flow"] = erpnext.financial_statements;
|
||||
18
erpnext/accounts/report/cash_flow/cash_flow.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"add_total_row": 0,
|
||||
"apply_user_permissions": 1,
|
||||
"creation": "2015-12-12 10:22:45.383203",
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"idx": 0,
|
||||
"is_standard": "Yes",
|
||||
"modified": "2015-12-12 10:22:45.383203",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Cash Flow",
|
||||
"owner": "Administrator",
|
||||
"ref_doctype": "GL Entry",
|
||||
"report_name": "Cash Flow",
|
||||
"report_type": "Script Report"
|
||||
}
|
||||
139
erpnext/accounts/report/cash_flow/cash_flow.py
Normal file
@@ -0,0 +1,139 @@
|
||||
# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe import _
|
||||
from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data)
|
||||
from erpnext.accounts.report.profit_and_loss_statement.profit_and_loss_statement import get_net_profit_loss
|
||||
|
||||
|
||||
def execute(filters=None):
|
||||
period_list = get_period_list(filters.fiscal_year, filters.periodicity)
|
||||
|
||||
operation_accounts = {
|
||||
"section_name": "Operations",
|
||||
"section_footer": _("Net Cash from Operations"),
|
||||
"section_header": _("Cash Flow from Operations"),
|
||||
"account_types": [
|
||||
{"account_type": "Depreciation", "label": _("Depreciation")},
|
||||
{"account_type": "Receivable", "label": _("Net Change in Accounts Receivable")},
|
||||
{"account_type": "Payable", "label": _("Net Change in Accounts Payable")},
|
||||
{"account_type": "Warehouse", "label": _("Net Change in Inventory")}
|
||||
]
|
||||
}
|
||||
|
||||
investing_accounts = {
|
||||
"section_name": "Investing",
|
||||
"section_footer": _("Net Cash from Investing"),
|
||||
"section_header": _("Cash Flow from Investing"),
|
||||
"account_types": [
|
||||
{"account_type": "Fixed Asset", "label": _("Net Change in Fixed Asset")}
|
||||
]
|
||||
}
|
||||
|
||||
financing_accounts = {
|
||||
"section_name": "Financing",
|
||||
"section_footer": _("Net Cash from Financing"),
|
||||
"section_header": _("Cash Flow from Financing"),
|
||||
"account_types": [
|
||||
{"account_type": "Equity", "label": _("Net Change in Equity")}
|
||||
]
|
||||
}
|
||||
|
||||
# combine all cash flow accounts for iteration
|
||||
cash_flow_accounts = []
|
||||
cash_flow_accounts.append(operation_accounts)
|
||||
cash_flow_accounts.append(investing_accounts)
|
||||
cash_flow_accounts.append(financing_accounts)
|
||||
|
||||
# compute net profit / loss
|
||||
income = get_data(filters.company, "Income", "Credit", period_list, ignore_closing_entries=True)
|
||||
expense = get_data(filters.company, "Expense", "Debit", period_list, ignore_closing_entries=True)
|
||||
net_profit_loss = get_net_profit_loss(income, expense, period_list, filters.company)
|
||||
|
||||
data = []
|
||||
|
||||
company_currency = frappe.db.get_value("Company", filters.company, "default_currency")
|
||||
|
||||
for cash_flow_account in cash_flow_accounts:
|
||||
|
||||
section_data = []
|
||||
data.append({
|
||||
"account_name": cash_flow_account['section_header'],
|
||||
"parent_account": None,
|
||||
"indent": 0.0,
|
||||
"account": cash_flow_account['section_header']
|
||||
})
|
||||
|
||||
if len(data) == 1:
|
||||
# add first net income in operations section
|
||||
if net_profit_loss:
|
||||
net_profit_loss.update({
|
||||
"indent": 1,
|
||||
"parent_account": operation_accounts['section_header']
|
||||
})
|
||||
data.append(net_profit_loss)
|
||||
section_data.append(net_profit_loss)
|
||||
|
||||
for account in cash_flow_account['account_types']:
|
||||
account_data = get_account_type_based_data(filters.company, account['account_type'], period_list)
|
||||
account_data.update({
|
||||
"account_name": account['label'],
|
||||
"indent": 1,
|
||||
"parent_account": cash_flow_account['section_header'],
|
||||
"currency": company_currency
|
||||
})
|
||||
data.append(account_data)
|
||||
section_data.append(account_data)
|
||||
|
||||
add_total_row_account(data, section_data, cash_flow_account['section_footer'],
|
||||
period_list, company_currency)
|
||||
|
||||
add_total_row_account(data, data, _("Net Change in Cash"), period_list, company_currency)
|
||||
columns = get_columns(period_list)
|
||||
|
||||
return columns, data
|
||||
|
||||
|
||||
def get_account_type_based_data(company, account_type, period_list):
|
||||
data = {}
|
||||
for period in period_list:
|
||||
gl_sum = frappe.db.sql_list("""
|
||||
select sum(credit) - sum(debit)
|
||||
from `tabGL Entry`
|
||||
where company=%s and posting_date >= %s and posting_date <= %s
|
||||
and voucher_type != 'Period Closing Voucher'
|
||||
and account in ( SELECT name FROM tabAccount WHERE account_type = %s)
|
||||
""", (company, period['from_date'], period['to_date'], account_type))
|
||||
|
||||
if gl_sum and gl_sum[0]:
|
||||
amount = gl_sum[0]
|
||||
if account_type == "Depreciation":
|
||||
amount *= -1
|
||||
else:
|
||||
amount = 0
|
||||
|
||||
data.update({
|
||||
"from_date": period['from_date'],
|
||||
"to_date": period['to_date'],
|
||||
period["key"]: amount
|
||||
})
|
||||
return data
|
||||
|
||||
|
||||
def add_total_row_account(out, data, label, period_list, currency):
|
||||
total_row = {
|
||||
"account_name": "'" + _("{0}").format(label) + "'",
|
||||
"account": None,
|
||||
"currency": currency
|
||||
}
|
||||
|
||||
for row in data:
|
||||
if row.get("parent_account"):
|
||||
for period in period_list:
|
||||
total_row.setdefault(period.key, 0.0)
|
||||
total_row[period.key] += row.get(period.key, 0.0)
|
||||
|
||||
out.append(total_row)
|
||||
out.append({})
|
||||
@@ -45,7 +45,7 @@
|
||||
<td class="text-right">
|
||||
{% var fieldname = report.columns[i].field; %}
|
||||
{% if (!is_null(row[fieldname])) { %}
|
||||
{%= format_currency(row[fieldname]) %}
|
||||
{%= format_currency(row[fieldname], row.currency) %}
|
||||
{% } %}
|
||||
</td>
|
||||
{% } %}
|
||||
|
||||
@@ -80,6 +80,8 @@ def get_data(company, root_type, balance_must_be, period_list, ignore_closing_en
|
||||
return None
|
||||
|
||||
accounts, accounts_by_name = filter_accounts(accounts)
|
||||
|
||||
company_currency = frappe.db.get_value("Company", company, "default_currency")
|
||||
|
||||
gl_entries_by_account = {}
|
||||
for root in frappe.db.sql("""select lft, rgt from tabAccount
|
||||
@@ -90,10 +92,10 @@ def get_data(company, root_type, balance_must_be, period_list, ignore_closing_en
|
||||
|
||||
calculate_values(accounts_by_name, gl_entries_by_account, period_list)
|
||||
accumulate_values_into_parents(accounts, accounts_by_name, period_list)
|
||||
out = prepare_data(accounts, balance_must_be, period_list)
|
||||
out = prepare_data(accounts, balance_must_be, period_list, company_currency)
|
||||
|
||||
if out:
|
||||
add_total_row(out, balance_must_be, period_list)
|
||||
add_total_row(out, balance_must_be, period_list, company_currency)
|
||||
|
||||
return out
|
||||
|
||||
@@ -114,7 +116,7 @@ def accumulate_values_into_parents(accounts, accounts_by_name, period_list):
|
||||
accounts_by_name[d.parent_account][period.key] = accounts_by_name[d.parent_account].get(period.key, 0.0) + \
|
||||
d.get(period.key, 0.0)
|
||||
|
||||
def prepare_data(accounts, balance_must_be, period_list):
|
||||
def prepare_data(accounts, balance_must_be, period_list, company_currency):
|
||||
out = []
|
||||
year_start_date = period_list[0]["year_start_date"].strftime("%Y-%m-%d")
|
||||
year_end_date = period_list[-1]["year_end_date"].strftime("%Y-%m-%d")
|
||||
@@ -128,7 +130,8 @@ def prepare_data(accounts, balance_must_be, period_list):
|
||||
"parent_account": d.parent_account,
|
||||
"indent": flt(d.indent),
|
||||
"from_date": year_start_date,
|
||||
"to_date": year_end_date
|
||||
"to_date": year_end_date,
|
||||
"currency": company_currency
|
||||
}
|
||||
for period in period_list:
|
||||
if d.get(period.key):
|
||||
@@ -146,10 +149,11 @@ def prepare_data(accounts, balance_must_be, period_list):
|
||||
|
||||
return out
|
||||
|
||||
def add_total_row(out, balance_must_be, period_list):
|
||||
def add_total_row(out, balance_must_be, period_list, company_currency):
|
||||
total_row = {
|
||||
"account_name": "'" + _("Total ({0})").format(balance_must_be) + "'",
|
||||
"account": None
|
||||
"account": None,
|
||||
"currency": company_currency
|
||||
}
|
||||
|
||||
for row in out:
|
||||
@@ -241,7 +245,7 @@ def set_gl_entries_by_account(company, from_date, to_date, root_lft, root_rgt, g
|
||||
|
||||
return gl_entries_by_account
|
||||
|
||||
def get_columns(period_list):
|
||||
def get_columns(period_list, company=None):
|
||||
columns = [{
|
||||
"fieldname": "account",
|
||||
"label": _("Account"),
|
||||
@@ -249,12 +253,22 @@ def get_columns(period_list):
|
||||
"options": "Account",
|
||||
"width": 300
|
||||
}]
|
||||
if company:
|
||||
columns.append({
|
||||
"fieldname": "currency",
|
||||
"label": _("Currency"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Currency",
|
||||
"hidden": 1
|
||||
})
|
||||
|
||||
for period in period_list:
|
||||
columns.append({
|
||||
"fieldname": period.key,
|
||||
"label": period.label,
|
||||
"fieldtype": "Currency",
|
||||
"options": "currency",
|
||||
"width": 150
|
||||
})
|
||||
|
||||
return columns
|
||||
return columns
|
||||
@@ -8,7 +8,7 @@ frappe.query_reports["General Ledger"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company"),
|
||||
"default": frappe.defaults.get_user_default("Company"),
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
|
||||
@@ -178,7 +178,8 @@ def get_data_with_opening_closing(filters, account_details, gl_entries):
|
||||
|
||||
else:
|
||||
for gl in gl_entries:
|
||||
if gl.posting_date >= getdate(filters.from_date) and gl.posting_date <= getdate(filters.to_date):
|
||||
if gl.posting_date >= getdate(filters.from_date) and gl.posting_date <= getdate(filters.to_date) \
|
||||
and gl.is_opening == "No":
|
||||
data.append(gl)
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ frappe.query_reports["Gross Profit"] = {
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"reqd": 1,
|
||||
"default": frappe.defaults.get_user_default("company")
|
||||
"default": frappe.defaults.get_user_default("Company")
|
||||
},
|
||||
{
|
||||
"fieldname":"from_date",
|
||||
|
||||
@@ -33,7 +33,7 @@ frappe.query_reports["Item-wise Purchase Register"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company")
|
||||
"default": frappe.defaults.get_user_default("Company")
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ frappe.query_reports["Item-wise Sales Register"] = frappe.query_reports["Sales R
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company")
|
||||
"default": frappe.defaults.get_user_default("Company")
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ frappe.query_reports["Payment Period Based On Invoice Date"] = {
|
||||
fieldtype: "Link",
|
||||
options: "Company",
|
||||
reqd: 1,
|
||||
default: frappe.defaults.get_user_default("company")
|
||||
default: frappe.defaults.get_user_default("Company")
|
||||
},
|
||||
{
|
||||
fieldname: "from_date",
|
||||
|
||||
@@ -9,10 +9,10 @@ from erpnext.accounts.report.financial_statements import (get_period_list, get_c
|
||||
|
||||
def execute(filters=None):
|
||||
period_list = get_period_list(filters.fiscal_year, filters.periodicity)
|
||||
|
||||
|
||||
income = get_data(filters.company, "Income", "Credit", period_list, ignore_closing_entries=True)
|
||||
expense = get_data(filters.company, "Expense", "Debit", period_list, ignore_closing_entries=True)
|
||||
net_profit_loss = get_net_profit_loss(income, expense, period_list)
|
||||
net_profit_loss = get_net_profit_loss(income, expense, period_list, filters.company)
|
||||
|
||||
data = []
|
||||
data.extend(income or [])
|
||||
@@ -20,16 +20,17 @@ def execute(filters=None):
|
||||
if net_profit_loss:
|
||||
data.append(net_profit_loss)
|
||||
|
||||
columns = get_columns(period_list)
|
||||
columns = get_columns(period_list, filters.company)
|
||||
|
||||
return columns, data
|
||||
|
||||
def get_net_profit_loss(income, expense, period_list):
|
||||
def get_net_profit_loss(income, expense, period_list, company):
|
||||
if income and expense:
|
||||
net_profit_loss = {
|
||||
"account_name": "'" + _("Net Profit / Loss") + "'",
|
||||
"account": None,
|
||||
"warn_if_negative": True
|
||||
"warn_if_negative": True,
|
||||
"currency": frappe.db.get_value("Company", company, "default_currency")
|
||||
}
|
||||
|
||||
for period in period_list:
|
||||
|
||||
@@ -27,7 +27,7 @@ frappe.query_reports["Purchase Register"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company")
|
||||
"default": frappe.defaults.get_user_default("Company")
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ frappe.query_reports["Sales Register"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company")
|
||||
"default": frappe.defaults.get_user_default("Company")
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ frappe.query_reports["Trial Balance"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company"),
|
||||
"default": frappe.defaults.get_user_default("Company"),
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
|
||||
@@ -16,6 +16,8 @@ def execute(filters=None):
|
||||
return columns, data
|
||||
|
||||
def validate_filters(filters):
|
||||
if not filters.fiscal_year:
|
||||
frappe.throw(_("Fiscal Year {0} is required"))
|
||||
filters.year_start_date, filters.year_end_date = frappe.db.get_value("Fiscal Year", filters.fiscal_year,
|
||||
["year_start_date", "year_end_date"])
|
||||
filters.year_start_date = getdate(filters.year_start_date)
|
||||
|
||||
@@ -8,7 +8,7 @@ frappe.query_reports["Trial Balance for Party"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company"),
|
||||
"default": frappe.defaults.get_user_default("Company"),
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
|
||||
@@ -383,7 +383,7 @@ def get_actual_expense(args):
|
||||
def get_currency_precision(currency=None):
|
||||
if not currency:
|
||||
currency = frappe.db.get_value("Company",
|
||||
frappe.db.get_default("company"), "default_currency", cache=True)
|
||||
frappe.db.get_default("Company"), "default_currency", cache=True)
|
||||
currency_format = frappe.db.get_value("Currency", currency, "number_format", cache=True)
|
||||
|
||||
from frappe.utils import get_number_format_info
|
||||
|
||||
@@ -59,7 +59,8 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
||||
this.frm.toggle_display("supplier_name",
|
||||
(this.supplier_name && this.frm.doc.supplier_name!==this.frm.doc.supplier));
|
||||
|
||||
if(this.frm.doctype==="Purchase Order" || this.frm.doctype==="Material Request") {
|
||||
if(this.frm.docstatus==0 &&
|
||||
(this.frm.doctype==="Purchase Order" || this.frm.doctype==="Material Request")) {
|
||||
this.set_from_product_bundle();
|
||||
}
|
||||
|
||||
|
||||
@@ -56,6 +56,8 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend(
|
||||
this.delivered_by_supplier).addClass("btn-primary");
|
||||
}
|
||||
} else if(doc.docstatus===0) {
|
||||
cur_frm.add_custom_button(__('Get Last Purchase Rate'), this.get_last_purchase_rate);
|
||||
|
||||
cur_frm.cscript.add_from_mappers();
|
||||
}
|
||||
|
||||
@@ -204,6 +206,16 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend(
|
||||
|
||||
delivered_by_supplier: function(){
|
||||
cur_frm.cscript.update_status('Deliver', 'Delivered')
|
||||
},
|
||||
|
||||
get_last_purchase_rate: function() {
|
||||
frappe.call({
|
||||
"method": "get_last_purchase_rate",
|
||||
"doc": cur_frm.doc,
|
||||
callback: function(r, rt) {
|
||||
cur_frm.cscript.calculate_taxes_and_totals();
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -1349,6 +1349,31 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "base_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Additional Discount Amount (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -1372,6 +1397,30 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "additional_discount_percentage",
|
||||
"fieldtype": "Float",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Additional Discount Percentage",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -1397,31 +1446,6 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "base_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Additional Discount Amount (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -2434,7 +2458,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-12-01 00:48:11.749313",
|
||||
"modified": "2015-12-17 16:18:39.096762",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Purchase Order",
|
||||
|
||||
@@ -8,6 +8,7 @@ from frappe.utils import cstr, flt
|
||||
from frappe import msgprint, _, throw
|
||||
from frappe.model.mapper import get_mapped_doc
|
||||
from erpnext.controllers.buying_controller import BuyingController
|
||||
from erpnext.stock.doctype.item.item import get_last_purchase_details
|
||||
from erpnext.stock.stock_balance import update_bin_qty, get_ordered_qty
|
||||
from frappe.desk.notifications import clear_doctype_notifications
|
||||
|
||||
@@ -83,6 +84,34 @@ class PurchaseOrder(BuyingController):
|
||||
if d.prevdoc_detail_docname and not d.schedule_date:
|
||||
d.schedule_date = frappe.db.get_value("Material Request Item",
|
||||
d.prevdoc_detail_docname, "schedule_date")
|
||||
|
||||
|
||||
def get_last_purchase_rate(self):
|
||||
"""get last purchase rates for all items"""
|
||||
|
||||
conversion_rate = flt(self.get('conversion_rate')) or 1.0
|
||||
|
||||
for d in self.get("items"):
|
||||
if d.item_code:
|
||||
last_purchase_details = get_last_purchase_details(d.item_code, self.name)
|
||||
|
||||
if last_purchase_details:
|
||||
d.base_price_list_rate = (last_purchase_details['base_price_list_rate'] *
|
||||
(flt(d.conversion_factor) or 1.0))
|
||||
d.discount_percentage = last_purchase_details['discount_percentage']
|
||||
d.base_rate = last_purchase_details['base_rate'] * (flt(d.conversion_factor) or 1.0)
|
||||
d.price_list_rate = d.base_price_list_rate / conversion_rate
|
||||
d.rate = d.base_rate / conversion_rate
|
||||
else:
|
||||
# if no last purchase found, reset all values to 0
|
||||
for field in ("base_price_list_rate", "base_rate",
|
||||
"price_list_rate", "rate", "discount_percentage"):
|
||||
d.set(field, 0)
|
||||
|
||||
item_last_purchase_rate = frappe.db.get_value("Item", d.item_code, "last_purchase_rate")
|
||||
if item_last_purchase_rate:
|
||||
d.base_price_list_rate = d.base_rate = d.price_list_rate \
|
||||
= d.rate = item_last_purchase_rate
|
||||
|
||||
# Check for Stopped status
|
||||
def check_for_stopped_or_closed_status(self, pc_obj):
|
||||
@@ -140,7 +169,7 @@ class PurchaseOrder(BuyingController):
|
||||
clear_doctype_notifications(self)
|
||||
|
||||
def on_submit(self):
|
||||
if self.has_drop_ship_item():
|
||||
if self.is_against_so():
|
||||
self.update_status_updater()
|
||||
|
||||
super(PurchaseOrder, self).on_submit()
|
||||
@@ -157,8 +186,10 @@ class PurchaseOrder(BuyingController):
|
||||
purchase_controller.update_last_purchase_rate(self, is_submit = 1)
|
||||
|
||||
def on_cancel(self):
|
||||
if self.has_drop_ship_item():
|
||||
if self.is_against_so():
|
||||
self.update_status_updater()
|
||||
|
||||
if self.has_drop_ship_item():
|
||||
self.update_delivered_qty_in_sales_order()
|
||||
|
||||
pc_obj = frappe.get_doc('Purchase Common')
|
||||
@@ -222,13 +253,10 @@ class PurchaseOrder(BuyingController):
|
||||
so.notify_update()
|
||||
|
||||
def has_drop_ship_item(self):
|
||||
is_drop_ship = False
|
||||
|
||||
for item in self.items:
|
||||
if item.delivered_by_supplier == 1:
|
||||
is_drop_ship = True
|
||||
|
||||
return is_drop_ship
|
||||
return any([d.delivered_by_supplier for d in self.items])
|
||||
|
||||
def is_against_so(self):
|
||||
return any([d.prevdoc_doctype for d in self.items if d.prevdoc_doctype=="Sales Order"])
|
||||
|
||||
def set_received_qty_for_drop_ship_items(self):
|
||||
for item in self.items:
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
"options": "Item",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -49,6 +50,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -73,6 +75,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -95,6 +98,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -111,7 +115,7 @@
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 1,
|
||||
"in_list_view": 0,
|
||||
"label": "Reqd By Date",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@@ -119,6 +123,7 @@
|
||||
"oldfieldtype": "Date",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -142,6 +147,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -166,6 +172,7 @@
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "300px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
@@ -189,6 +196,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -212,6 +220,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -236,6 +245,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -258,6 +268,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -282,6 +293,7 @@
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "60px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
@@ -309,6 +321,7 @@
|
||||
"options": "UOM",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "100px",
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
@@ -332,6 +345,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -357,6 +371,7 @@
|
||||
"options": "UOM",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "100px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
@@ -383,6 +398,7 @@
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "100px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
@@ -406,6 +422,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -429,6 +446,7 @@
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -452,6 +470,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -473,6 +492,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -496,6 +516,7 @@
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -517,6 +538,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -542,6 +564,7 @@
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -567,6 +590,7 @@
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -588,6 +612,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -613,6 +638,7 @@
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "100px",
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
@@ -640,6 +666,7 @@
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -663,6 +690,7 @@
|
||||
"options": "Pricing Rule",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -685,6 +713,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -709,6 +738,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -733,6 +763,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -755,6 +786,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -779,6 +811,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -803,6 +836,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -825,6 +859,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -850,6 +885,7 @@
|
||||
"options": "Warehouse",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -873,6 +909,7 @@
|
||||
"options": "Project",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -898,6 +935,7 @@
|
||||
"options": "DocType",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -923,6 +961,7 @@
|
||||
"options": "prevdoc_doctype",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "120px",
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
@@ -949,6 +988,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -972,6 +1012,7 @@
|
||||
"options": "Supplier Quotation",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -995,6 +1036,7 @@
|
||||
"options": "Supplier Quotation Item",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1018,6 +1060,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1039,6 +1082,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1065,6 +1109,7 @@
|
||||
"options": "Item Group",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1090,6 +1135,7 @@
|
||||
"options": "Brand",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1114,6 +1160,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1138,6 +1185,7 @@
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "100px",
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
@@ -1164,6 +1212,7 @@
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1188,6 +1237,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1211,6 +1261,7 @@
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1236,6 +1287,7 @@
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 1,
|
||||
"reqd": 0,
|
||||
@@ -1260,6 +1312,7 @@
|
||||
"oldfieldtype": "Check",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -1277,7 +1330,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-19 02:53:19.301428",
|
||||
"modified": "2016-01-06 02:21:10.407871",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Purchase Order Item",
|
||||
|
||||
@@ -25,7 +25,7 @@ cur_frm.cscript.make_dashboard = function(doc) {
|
||||
if(doc.__islocal)
|
||||
return;
|
||||
if (in_list(user_roles, "Accounts User") || in_list(user_roles, "Accounts Manager"))
|
||||
cur_frm.dashboard.set_headline('<span class="text-muted">Loading...</span>')
|
||||
cur_frm.dashboard.set_headline('<span class="text-muted">' + __('Loading') + '</span>')
|
||||
|
||||
cur_frm.dashboard.add_doctype_badge("Supplier Quotation", "supplier");
|
||||
cur_frm.dashboard.add_doctype_badge("Purchase Order", "supplier");
|
||||
@@ -41,7 +41,7 @@ cur_frm.cscript.make_dashboard = function(doc) {
|
||||
callback: function(r) {
|
||||
if (in_list(user_roles, "Accounts User") || in_list(user_roles, "Accounts Manager")) {
|
||||
cur_frm.dashboard.set_headline(
|
||||
__("Total Billing This Year: ") + "<b>"
|
||||
__("Total billing this year") + ": <b>"
|
||||
+ format_currency(r.message.billing_this_year, cur_frm.doc.party_account_currency)
|
||||
+ '</b> / <span class="text-muted">' + __("Total Unpaid") + ": <b>"
|
||||
+ format_currency(r.message.total_unpaid, cur_frm.doc.party_account_currency)
|
||||
|
||||
@@ -473,30 +473,6 @@
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "communications",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 1,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Communications",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Communication",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
@@ -509,7 +485,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-12-08 12:52:56.827461",
|
||||
"modified": "2016-01-06 02:35:18.285473",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Supplier",
|
||||
|
||||
@@ -1080,6 +1080,31 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "base_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Additional Discount Amount (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -1103,6 +1128,30 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "additional_discount_percentage",
|
||||
"fieldtype": "Float",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Additional Discount Percentage",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -1128,31 +1177,6 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "base_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Additional Discount Amount (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -1690,7 +1714,7 @@
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2015-12-01 00:48:50.969833",
|
||||
"modified": "2015-12-17 16:18:29.855942",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Supplier Quotation",
|
||||
|
||||
6
erpnext/change_log/v6/v6.16.3.md
Normal file
@@ -0,0 +1,6 @@
|
||||
- Track billed status of a Delivery Note (DN) or Purchase Receipt (PR)
|
||||
- Added new status **To Bill** and **Completed** in Delivery Note and Purchase Receipt
|
||||
- The system looks for Invoices directly created from Delivery Note / Purchase Receipt *(Workflow: Order -> DN/PR -> Invoice)* and allocates these amounts directly to the DN/PR
|
||||
- Next, it looks for Invoices not created from Delivery Note / Purchase Receipt, but from an Order *(Workflow: Order -> Invoice, Order -> DN/PR)* and the DN/PR is selected based on FIFO for allocating the billed amount
|
||||
- In Stock Entry, re-calculate Additional Costs and Amount on changing Quantity or Rate
|
||||
- Chart of Accounts for Singapore
|
||||
1
erpnext/change_log/v6/v6_13_1.md
Normal file
@@ -0,0 +1 @@
|
||||
- [ERPNext Manual in German](http://frappe.github.io/erpnext/user/manual/de/) contributed by [CWT Connector & Wire Technology GmbH](http://www.cwt-assembly.com/)
|
||||
7
erpnext/change_log/v6/v6_14_0.md
Normal file
@@ -0,0 +1,7 @@
|
||||
- **Cash Flow Report**
|
||||
- Thank you [Chris Ian Fiel](https://discuss.erpnext.com/users/ccfiel/activity) for this much needed report!
|
||||
- You can access this report from *Accounts > Main Reports > Cash Flow*
|
||||
- **Additional Discount Percentage**
|
||||
- Enter a percentage value to calculate Additional Discount Amount
|
||||
- Apply such a discount in the POS screen
|
||||
- Available in all Selling and Buying transactions
|
||||
@@ -229,6 +229,12 @@ def get_data():
|
||||
"doctype": "GL Entry",
|
||||
"is_query_report": True
|
||||
},
|
||||
{
|
||||
"type": "report",
|
||||
"name": "Cash Flow",
|
||||
"doctype": "GL Entry",
|
||||
"is_query_report": True
|
||||
},
|
||||
{
|
||||
"type": "report",
|
||||
"name": "Profit and Loss Statement",
|
||||
|
||||
@@ -32,7 +32,8 @@ def get_data():
|
||||
"icon": "icon-th",
|
||||
"icon": "octicon octicon-credit-card",
|
||||
"type": "page",
|
||||
"link": "pos"
|
||||
"link": "pos",
|
||||
"label": _("POS")
|
||||
},
|
||||
"Projects": {
|
||||
"color": "#8e44ad",
|
||||
@@ -68,6 +69,7 @@ def get_data():
|
||||
"force_show": True,
|
||||
"icon": "octicon octicon-device-camera-video",
|
||||
"type": "module",
|
||||
"is_help": True
|
||||
"is_help": True,
|
||||
"label": _("Learn")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,11 @@ def get_data():
|
||||
"label": _("Customizing Forms"),
|
||||
"youtube_id": "pJhL9mmxV_U"
|
||||
},
|
||||
{
|
||||
"type": "help",
|
||||
"label": _("Report Builder"),
|
||||
"youtube_id": "y0o5iYZOioU"
|
||||
},
|
||||
]
|
||||
|
||||
},
|
||||
@@ -57,6 +62,16 @@ def get_data():
|
||||
"label": _("Workflow"),
|
||||
"youtube_id": "yObJUg9FxFs"
|
||||
},
|
||||
{
|
||||
"type": "help",
|
||||
"label": _("Email Account"),
|
||||
"youtube_id": "YFYe0DrB95o"
|
||||
},
|
||||
{
|
||||
"type": "help",
|
||||
"label": _("File Manager"),
|
||||
"youtube_id": "4-osLW3E_Rk"
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -76,7 +91,12 @@ def get_data():
|
||||
"type": "help",
|
||||
"label": _("Opening Accounting Balance"),
|
||||
"youtube_id": "kdgM20Q-q68"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "help",
|
||||
"label": _("Advance Payments"),
|
||||
"youtube_id": "J46-6qtyZ9U"
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -111,7 +131,17 @@ def get_data():
|
||||
"type": "help",
|
||||
"label": _("Point-of-Sale"),
|
||||
"youtube_id": "4WkelWkbP_c"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "help",
|
||||
"label": _("Product Bundle"),
|
||||
"youtube_id": "yk-7kPrRyRRc"
|
||||
},
|
||||
{
|
||||
"type": "help",
|
||||
"label": _("Drop Ship"),
|
||||
"youtube_id": "hUc0hu_XLdo"
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -152,6 +182,11 @@ def get_data():
|
||||
"label": _("Managing Subcontracting"),
|
||||
"youtube_id": "ThiMCC2DtKo"
|
||||
},
|
||||
{
|
||||
"type": "help",
|
||||
"label": _("Quality Inspection"),
|
||||
"youtube_id": "WmtcF3Y40Fs"
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -235,4 +270,19 @@ def get_data():
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": _("Website"),
|
||||
"items": [
|
||||
{
|
||||
"type": "help",
|
||||
"label": _("Publish Items on Website"),
|
||||
"youtube_id": "W31LBBNzbgc"
|
||||
},
|
||||
{
|
||||
"type": "help",
|
||||
"label": _("Shopping Cart"),
|
||||
"youtube_id": "xkrYO-KFukM"
|
||||
},
|
||||
]
|
||||
},
|
||||
]
|
||||
|
||||
@@ -12,7 +12,7 @@ class InvalidItemAttributeValueError(frappe.ValidationError): pass
|
||||
class ItemTemplateCannotHaveStock(frappe.ValidationError): pass
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_variant(item, args):
|
||||
def get_variant(template, args, variant=None):
|
||||
"""Validates Attributes and their Values, then looks for an exactly matching Item Variant
|
||||
|
||||
:param item: Template Item
|
||||
@@ -24,9 +24,9 @@ def get_variant(item, args):
|
||||
if not args:
|
||||
frappe.throw(_("Please specify at least one attribute in the Attributes table"))
|
||||
|
||||
validate_item_variant_attributes(item, args)
|
||||
validate_item_variant_attributes(template, args)
|
||||
|
||||
return find_variant(item, args)
|
||||
return find_variant(template, args, variant)
|
||||
|
||||
def validate_item_variant_attributes(item, args):
|
||||
attribute_values = {}
|
||||
@@ -65,7 +65,7 @@ def validate_item_variant_attributes(item, args):
|
||||
frappe.throw(_("Value {0} for Attribute {1} does not exist in the list of valid Item Attribute Values").format(
|
||||
value, attribute))
|
||||
|
||||
def find_variant(item, args):
|
||||
def find_variant(template, args, variant_item_code=None):
|
||||
conditions = ["""(iv_attribute.attribute="{0}" and iv_attribute.attribute_value="{1}")"""\
|
||||
.format(frappe.db.escape(key), frappe.db.escape(cstr(value))) for key, value in args.items()]
|
||||
|
||||
@@ -79,8 +79,8 @@ def find_variant(item, args):
|
||||
where variant_of=%s and exists (
|
||||
select name from `tabItem Variant Attribute` iv_attribute
|
||||
where iv_attribute.parent=item.name
|
||||
and ({conditions})
|
||||
)""".format(conditions=conditions), item)
|
||||
and ({conditions}) and parent != %s
|
||||
)""".format(conditions=conditions), (template, cstr(variant_item_code)))
|
||||
|
||||
for variant in possible_variants:
|
||||
variant = frappe.get_doc("Item", variant)
|
||||
|
||||
@@ -52,13 +52,15 @@ status_map = {
|
||||
],
|
||||
"Delivery Note": [
|
||||
["Draft", None],
|
||||
["Submitted", "eval:self.docstatus==1"],
|
||||
["To Bill", "eval:self.per_billed < 100 and self.docstatus == 1"],
|
||||
["Completed", "eval:self.per_billed == 100 and self.docstatus == 1"],
|
||||
["Cancelled", "eval:self.docstatus==2"],
|
||||
["Closed", "eval:self.status=='Closed'"],
|
||||
],
|
||||
"Purchase Receipt": [
|
||||
["Draft", None],
|
||||
["Submitted", "eval:self.docstatus==1"],
|
||||
["To Bill", "eval:self.per_billed < 100 and self.docstatus == 1"],
|
||||
["Completed", "eval:self.per_billed == 100 and self.docstatus == 1"],
|
||||
["Cancelled", "eval:self.docstatus==2"],
|
||||
["Closed", "eval:self.status=='Closed'"],
|
||||
]
|
||||
@@ -79,7 +81,7 @@ class StatusUpdater(Document):
|
||||
def set_status(self, update=False, status=None, update_modified=True):
|
||||
if self.is_new():
|
||||
return
|
||||
|
||||
|
||||
if self.doctype in status_map:
|
||||
_status = self.status
|
||||
|
||||
@@ -102,9 +104,9 @@ class StatusUpdater(Document):
|
||||
|
||||
if self.status != _status and self.status not in ("Submitted", "Cancelled"):
|
||||
self.add_comment("Label", _(self.status))
|
||||
|
||||
|
||||
if update:
|
||||
frappe.db.set_value(self.doctype, self.name, "status", self.status,
|
||||
frappe.db.set_value(self.doctype, self.name, "status", self.status,
|
||||
update_modified=update_modified)
|
||||
|
||||
def validate_qty(self):
|
||||
@@ -153,7 +155,6 @@ class StatusUpdater(Document):
|
||||
# check if overflow is within tolerance
|
||||
tolerance, self.tolerance, self.global_tolerance = get_tolerance_for(item['item_code'],
|
||||
self.tolerance, self.global_tolerance)
|
||||
|
||||
overflow_percent = ((item[args['target_field']] - item[args['target_ref_field']]) /
|
||||
item[args['target_ref_field']]) * 100
|
||||
|
||||
@@ -166,10 +167,10 @@ class StatusUpdater(Document):
|
||||
throw(_("{0} must be reduced by {1} or you should increase overflow tolerance")
|
||||
.format(_(item["target_ref_field"].title()), item["reduce_by"]))
|
||||
|
||||
def update_qty(self, change_modified=True):
|
||||
def update_qty(self, update_modified=True):
|
||||
"""Updates qty or amount at row level
|
||||
|
||||
:param change_modified: If true, updates `modified` and `modified_by` for target parent doc
|
||||
:param update_modified: If true, updates `modified` and `modified_by` for target parent doc
|
||||
"""
|
||||
for args in self.status_updater:
|
||||
# condition to include current record (if submit or no if cancel)
|
||||
@@ -178,22 +179,19 @@ class StatusUpdater(Document):
|
||||
else:
|
||||
args['cond'] = ' and parent!="%s"' % self.name.replace('"', '\"')
|
||||
|
||||
args['set_modified'] = ''
|
||||
if change_modified:
|
||||
args['set_modified'] = ', modified = now(), modified_by = "{0}"'\
|
||||
.format(frappe.db.escape(frappe.session.user))
|
||||
|
||||
self._update_children(args)
|
||||
self._update_children(args, update_modified)
|
||||
|
||||
if "percent_join_field" in args:
|
||||
self._update_percent_field(args)
|
||||
self._update_percent_field_in_targets(args, update_modified)
|
||||
|
||||
def _update_children(self, args):
|
||||
def _update_children(self, args, update_modified):
|
||||
"""Update quantities or amount in child table"""
|
||||
for d in self.get_all_children():
|
||||
if d.doctype != args['source_dt']:
|
||||
continue
|
||||
|
||||
self._update_modified(args, update_modified)
|
||||
|
||||
# updates qty in the child table
|
||||
args['detail_id'] = d.get(args['join_field'])
|
||||
|
||||
@@ -212,44 +210,58 @@ class StatusUpdater(Document):
|
||||
if not args.get("extra_cond"): args["extra_cond"] = ""
|
||||
|
||||
frappe.db.sql("""update `tab%(target_dt)s`
|
||||
set %(target_field)s = (select ifnull(sum(%(source_field)s), 0)
|
||||
from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s"
|
||||
and (docstatus=1 %(cond)s) %(extra_cond)s) %(second_source_condition)s
|
||||
set %(target_field)s = (
|
||||
(select ifnull(sum(%(source_field)s), 0)
|
||||
from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s"
|
||||
and (docstatus=1 %(cond)s) %(extra_cond)s)
|
||||
%(second_source_condition)s
|
||||
)
|
||||
%(update_modified)s
|
||||
where name='%(detail_id)s'""" % args)
|
||||
|
||||
def _update_percent_field(self, args):
|
||||
def _update_percent_field_in_targets(self, args, update_modified=True):
|
||||
"""Update percent field in parent transaction"""
|
||||
unique_transactions = set([d.get(args['percent_join_field']) for d in self.get_all_children(args['source_dt'])])
|
||||
distinct_transactions = set([d.get(args['percent_join_field'])
|
||||
for d in self.get_all_children(args['source_dt'])])
|
||||
|
||||
for name in unique_transactions:
|
||||
if not name:
|
||||
continue
|
||||
for name in distinct_transactions:
|
||||
if name:
|
||||
args['name'] = name
|
||||
self._update_percent_field(args, update_modified)
|
||||
|
||||
args['name'] = name
|
||||
def _update_percent_field(self, args, update_modified=True):
|
||||
"""Update percent field in parent transaction"""
|
||||
|
||||
# update percent complete in the parent table
|
||||
if args.get('target_parent_field'):
|
||||
frappe.db.sql("""update `tab%(target_parent_dt)s`
|
||||
set %(target_parent_field)s = round(
|
||||
ifnull((select
|
||||
ifnull(sum(if(%(target_ref_field)s > %(target_field)s, %(target_field)s, %(target_ref_field)s)), 0)
|
||||
/ sum(%(target_ref_field)s) * 100
|
||||
from `tab%(target_dt)s` where parent="%(name)s"), 0), 2)
|
||||
%(set_modified)s
|
||||
where name='%(name)s'""" % args)
|
||||
self._update_modified(args, update_modified)
|
||||
|
||||
# update field
|
||||
if args.get('status_field'):
|
||||
frappe.db.sql("""update `tab%(target_parent_dt)s`
|
||||
set %(status_field)s = if(%(target_parent_field)s<0.001,
|
||||
'Not %(keyword)s', if(%(target_parent_field)s>=99.99,
|
||||
'Fully %(keyword)s', 'Partly %(keyword)s'))
|
||||
where name='%(name)s'""" % args)
|
||||
if args.get('target_parent_field'):
|
||||
frappe.db.sql("""update `tab%(target_parent_dt)s`
|
||||
set %(target_parent_field)s = round(
|
||||
ifnull((select
|
||||
ifnull(sum(if(%(target_ref_field)s > %(target_field)s, %(target_field)s, %(target_ref_field)s)), 0)
|
||||
/ sum(%(target_ref_field)s) * 100
|
||||
from `tab%(target_dt)s` where parent="%(name)s"), 0), 2)
|
||||
%(update_modified)s
|
||||
where name='%(name)s'""" % args)
|
||||
|
||||
if args.get("set_modified"):
|
||||
target = frappe.get_doc(args["target_parent_dt"], name)
|
||||
target.set_status(update=True)
|
||||
target.notify_update()
|
||||
# update field
|
||||
if args.get('status_field'):
|
||||
frappe.db.sql("""update `tab%(target_parent_dt)s`
|
||||
set %(status_field)s = if(%(target_parent_field)s<0.001,
|
||||
'Not %(keyword)s', if(%(target_parent_field)s>=99.99,
|
||||
'Fully %(keyword)s', 'Partly %(keyword)s'))
|
||||
where name='%(name)s'""" % args)
|
||||
|
||||
if update_modified:
|
||||
target = frappe.get_doc(args["target_parent_dt"], args["name"])
|
||||
target.set_status(update=True)
|
||||
target.notify_update()
|
||||
|
||||
def _update_modified(self, args, update_modified):
|
||||
args['update_modified'] = ''
|
||||
if update_modified:
|
||||
args['update_modified'] = ', modified = now(), modified_by = "{0}"'\
|
||||
.format(frappe.db.escape(frappe.session.user))
|
||||
|
||||
def update_billing_status_for_zero_amount_refdoc(self, ref_dt):
|
||||
ref_fieldname = ref_dt.lower().replace(" ", "_")
|
||||
|
||||
@@ -312,6 +312,16 @@ class StockController(AccountsController):
|
||||
|
||||
for w in warehouses:
|
||||
validate_warehouse_company(w, self.company)
|
||||
|
||||
def update_billing_percentage(self, update_modified=True):
|
||||
self._update_percent_field({
|
||||
"target_dt": self.doctype + " Item",
|
||||
"target_parent_dt": self.doctype,
|
||||
"target_parent_field": "per_billed",
|
||||
"target_ref_field": "amount",
|
||||
"target_field": "billed_amt",
|
||||
"name": self.name,
|
||||
}, update_modified)
|
||||
|
||||
def update_gl_entries_after(posting_date, posting_time, for_warehouses=None, for_items=None,
|
||||
warehouse_account=None):
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
from __future__ import unicode_literals
|
||||
import json
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe import _, scrub
|
||||
from frappe.utils import cint, flt, rounded
|
||||
from erpnext.setup.utils import get_company_currency
|
||||
from erpnext.controllers.accounts_controller import validate_conversion_rate, \
|
||||
@@ -20,6 +20,7 @@ class calculate_taxes_and_totals(object):
|
||||
self._calculate()
|
||||
|
||||
if self.doc.meta.get_field("discount_amount"):
|
||||
self.set_discount_amount()
|
||||
self.apply_discount_amount()
|
||||
|
||||
if self.doc.doctype in ["Sales Invoice", "Purchase Invoice"]:
|
||||
@@ -325,6 +326,11 @@ class calculate_taxes_and_totals(object):
|
||||
def _cleanup(self):
|
||||
for tax in self.doc.get("taxes"):
|
||||
tax.item_wise_tax_detail = json.dumps(tax.item_wise_tax_detail, separators=(',', ':'))
|
||||
|
||||
def set_discount_amount(self):
|
||||
if not self.doc.discount_amount and self.doc.additional_discount_percentage:
|
||||
self.doc.discount_amount = flt(flt(self.doc.get(scrub(self.doc.apply_discount_on)))
|
||||
* self.doc.additional_discount_percentage / 100, self.doc.precision("discount_amount"))
|
||||
|
||||
def apply_discount_amount(self):
|
||||
if self.doc.discount_amount:
|
||||
|
||||
@@ -90,7 +90,7 @@ def _make_customer(source_name, target_doc=None, ignore_permissions=False):
|
||||
target.customer_type = "Individual"
|
||||
target.customer_name = source.lead_name
|
||||
|
||||
target.customer_group = frappe.db.get_default("customer_group")
|
||||
target.customer_group = frappe.db.get_default("Customer Group")
|
||||
|
||||
doclist = get_mapped_doc("Lead", source_name,
|
||||
{"Lead": {
|
||||
|
||||
@@ -121,7 +121,7 @@ def create_lead(email_id):
|
||||
"lead_name": real_name or email_id,
|
||||
"status": "Lead",
|
||||
"naming_series": get_default_naming_series("Lead"),
|
||||
"company": frappe.db.get_default("company"),
|
||||
"company": frappe.db.get_default("Company"),
|
||||
"source": "Email"
|
||||
})
|
||||
lead.insert()
|
||||
|
||||
@@ -29,8 +29,8 @@ erpnext.crm.Opportunity = frappe.ui.form.Controller.extend({
|
||||
|
||||
if(!this.frm.doc.status)
|
||||
set_multiple(cdt, cdn, { status:'Draft' });
|
||||
if(!this.frm.doc.company && frappe.defaults.get_user_default("company"))
|
||||
set_multiple(cdt, cdn, { company:frappe.defaults.get_user_default("company") });
|
||||
if(!this.frm.doc.company && frappe.defaults.get_user_default("Company"))
|
||||
set_multiple(cdt, cdn, { company:frappe.defaults.get_user_default("Company") });
|
||||
if(!this.frm.doc.fiscal_year && sys_defaults.fiscal_year)
|
||||
set_multiple(cdt, cdn, { fiscal_year:sys_defaults.fiscal_year });
|
||||
|
||||
@@ -90,12 +90,12 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
|
||||
var frm = cur_frm;
|
||||
if(frm.perm[0].write && doc.docstatus==0) {
|
||||
if(frm.doc.status==="Open") {
|
||||
frm.add_custom_button("Close", function() {
|
||||
frm.add_custom_button(__("Close"), function() {
|
||||
frm.set_value("status", "Closed");
|
||||
frm.save();
|
||||
});
|
||||
} else {
|
||||
frm.add_custom_button("Reopen", function() {
|
||||
frm.add_custom_button(__("Reopen"), function() {
|
||||
frm.set_value("status", "Open");
|
||||
frm.save();
|
||||
});
|
||||
|
||||
|
Before Width: | Height: | Size: 183 KiB After Width: | Height: | Size: 182 KiB |
BIN
erpnext/docs/assets/img/accounts/recurring.gif
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 17 KiB |