Compare commits

...

179 Commits

Author SHA1 Message Date
Pratik Vyas
b02788b915 Merge branch 'develop' 2014-12-31 12:41:14 +05:30
Pratik Vyas
b094ee45d7 bumped to version 4.15.4 2014-12-31 13:11:14 +06:00
Nabin Hait
de0c87757a Merge pull request #2539 from nabinhait/fix1
item validation in bom
2014-12-31 12:37:38 +05:30
Nabin Hait
5604f987f2 item validation in bom 2014-12-31 12:37:11 +05:30
Nabin Hait
9d14f0f36a Merge pull request #2538 from nabinhait/fix1
set missing cost center using default
2014-12-30 18:35:14 +05:30
Nabin Hait
a74468b353 set missing cost center using default 2014-12-30 18:33:52 +05:30
Nabin Hait
35f81b24f1 Merge pull request #2537 from nabinhait/fix1
focus on barcode field after adding a row
2014-12-30 17:53:58 +05:30
Nabin Hait
40431cbf89 focus on barcode field after adding a row 2014-12-30 17:53:16 +05:30
Nabin Hait
5529f14aaf Merge pull request #2536 from nabinhait/fix1
Fixes in Stock Analytics
2014-12-30 16:35:57 +05:30
Nabin Hait
54c31b498b Fixes in Stock Analytics 2014-12-30 16:33:07 +05:30
Nabin Hait
899dba9022 Merge pull request #2535 from nabinhait/fix1
always calculate taxes and totals onchange of exchange rate
2014-12-30 15:41:22 +05:30
Nabin Hait
7d8fa8089a always calculate taxes and totals onchange of exchange rate 2014-12-30 15:35:59 +05:30
Pratik Vyas
ac86c5b6d1 Merge branch 'develop' 2014-12-28 16:59:08 +05:30
Pratik Vyas
ecc3f312b9 bumped to version 4.15.3 2014-12-28 17:29:08 +06:00
Nabin Hait
b65b5f43a7 Merge pull request #2530 from nabinhait/fix1
exchange_rate no_copy fix
2014-12-26 11:00:03 +05:30
Nabin Hait
c3270d7504 exchange_rate no_copy fix 2014-12-26 10:58:58 +05:30
Pratik Vyas
ea909ace01 Merge branch 'develop' 2014-12-23 19:11:08 +05:30
Pratik Vyas
f64d11da3c bumped to version 4.15.2 2014-12-23 19:41:08 +06:00
Nabin Hait
95225be93d Merge pull request #2509 from pdvyas/fix-patches
add reload_doc in a few patches
2014-12-23 17:43:52 +05:30
Nabin Hait
e5d169b8d2 Merge pull request #2521 from nabinhait/fix1
fixed negative batch wty message
2014-12-23 11:26:04 +05:30
Nabin Hait
da4e3fb366 fixed negative batch wty message 2014-12-23 10:58:01 +05:30
Nabin Hait
13ce150149 Merge pull request #2520 from nabinhait/fix1
minor fix no-copy
2014-12-22 15:07:28 +05:30
Nabin Hait
a04489a72b minor fix no-copy 2014-12-22 14:58:36 +05:30
Pratik Vyas
35cd88b09b Merge branch 'develop' 2014-12-22 11:17:45 +05:30
Pratik Vyas
ff56566506 bumped to version 4.15.1 2014-12-22 11:47:45 +06:00
Nabin Hait
01ad94bfad Merge pull request #2519 from nabinhait/fix1
Dont reset pricing if ignore pricing rule
2014-12-22 11:16:02 +05:30
Nabin Hait
cfe3c54ca0 Dont reset pricing if ignore pricing rule 2014-12-22 10:43:10 +05:30
Pratik Vyas
2f6a20a93a Merge branch 'develop' 2014-12-19 18:13:55 +05:30
Pratik Vyas
5d1543f241 bumped to version 4.15.0 2014-12-19 18:43:55 +06:00
Nabin Hait
c56650c773 Merge pull request #2516 from nabinhait/fix1
Customer should not copied from lead to opoortunity
2014-12-19 10:52:52 +05:30
Nabin Hait
cb11f27558 Customer should not copied from lead to opoortunity 2014-12-19 10:51:59 +05:30
Anand Doshi
98be98816c Merge pull request #2515 from anandpdoshi/anand-dec-18
[fix] In Setup Wizard, load languages from languages.txt
2014-12-18 17:40:58 +05:30
Anand Doshi
ca2c297f72 [fix] In Setup Wizard, load languages from languages.txt 2014-12-18 17:31:21 +05:30
Pratik Vyas
387e1e21cb add reload_doc in a few patches 2014-12-18 11:36:23 +05:30
Nabin Hait
d6e49150a8 Merge pull request #2505 from nabinhait/fix1
Reapply price list if pricing rule reset as blank
2014-12-17 15:39:28 +05:30
Nabin Hait
49a2729663 Reapply price list if pricing rule reset as blank 2014-12-17 11:24:00 +05:30
Pratik Vyas
06baf20edd Merge branch 'develop' 2014-12-16 15:47:07 +05:30
Pratik Vyas
13553c2bf0 bumped to version 4.14.0 2014-12-16 16:17:06 +06:00
Nabin Hait
f638c1acd5 Merge pull request #2503 from nabinhait/fix1
packing list index
2014-12-16 15:17:27 +05:30
Nabin Hait
e4c659386a packing list index 2014-12-16 15:16:55 +05:30
Anand Doshi
cd7a1661c6 Merge pull request #2498 from anandpdoshi/anand-dec-15
[minor] use frappe.attach_print() in salary slip and recurring document
2014-12-16 12:42:40 +05:30
Nabin Hait
96962e2101 Merge pull request #2501 from nabinhait/fix1
Fecth contact details on change of contact in purchase transactions
2014-12-16 11:57:11 +05:30
Nabin Hait
7eedebc970 Fecth contact details on change of contact in purchase transactions 2014-12-16 11:56:21 +05:30
Nabin Hait
437e34accb Merge pull request #2500 from nabinhait/fix1
no copy property for customer's po no
2014-12-16 11:26:08 +05:30
Nabin Hait
0f2137be18 no copy property for customer's po no 2014-12-16 10:37:55 +05:30
Anand Doshi
f87a622ef0 [minor] use frappe.attach_print() in salary slip and recurring document 2014-12-15 23:14:35 +05:30
Nabin Hait
07722b835c Merge pull request #2495 from nabinhait/fix1
Translation fixes
2014-12-15 15:00:12 +05:30
Nabin Hait
3cd7a45c1b Translation fixes 2014-12-15 14:56:58 +05:30
Nabin Hait
90b5174256 minor fix 2014-12-15 11:48:43 +05:30
Pratik Vyas
bffad26226 Merge branch 'develop' 2014-12-12 16:52:09 +05:30
Pratik Vyas
a578f3e23a bumped to version 4.13.1 2014-12-12 17:22:09 +06:00
Nabin Hait
870dd43268 Merge pull request #2489 from nabinhait/fix1
Pull all customer's po no in delivery note when made from multiple SO
2014-12-12 12:50:41 +05:30
Nabin Hait
ad0bd4ca92 Pull all customer's po no in delivery note when made from multiple sales order 2014-12-12 12:49:45 +05:30
Nabin Hait
eba480e15a Merge pull request #2487 from nabinhait/fix1
Fixed bom patch
2014-12-12 11:29:49 +05:30
Nabin Hait
4b83403a63 Fixed bom patch 2014-12-12 11:28:58 +05:30
Nabin Hait
22c9e42f4d Merge pull request #2482 from neilLasrado/fix-cost
Fixed cost calculation Error
2014-12-11 17:36:49 +05:30
Neil Trini Lasrado
6ddc487fb6 patch fix 2014-12-11 17:33:41 +05:30
Neil Trini Lasrado
3a34cadcb2 Fix - Total Fixed Cost with patch 2014-12-11 17:15:12 +05:30
Nabin Hait
b71d1a4c7f Merge pull request #2486 from nabinhait/fix1
Removed gross profit field from sales invoice
2014-12-11 17:14:26 +05:30
Nabin Hait
bef80bab0d Removed gross profit field from sales invoice 2014-12-11 16:27:18 +05:30
Nabin Hait
190210394c Merge pull request #2484 from nabinhait/fix1
Leave application fix
2014-12-11 00:02:38 +05:30
Nabin Hait
5cafcf66b0 Leave application fix 2014-12-10 23:59:04 +05:30
Nabin Hait
d71e50c9fc Merge pull request #2480 from nabinhait/fix1
Fixes for discount amount
2014-12-10 12:44:56 +05:30
Nabin Hait
35ebe1bf78 Tax amount in POS invoice print format 2014-12-10 12:42:32 +05:30
Nabin Hait
b14cc0417d Display tax amount after discount, if there is any discount amount 2014-12-10 12:28:25 +05:30
Pratik Vyas
399a3097e8 Merge branch 'develop' 2014-12-09 16:40:28 +05:30
Pratik Vyas
c8f5c3cdbe bumped to version 4.13.0 2014-12-09 17:10:28 +06:00
Nabin Hait
e83d506319 Merge pull request #2474 from nabinhait/fix1
Added leave approver name field in leave application
2014-12-09 16:37:40 +05:30
Nabin Hait
690bcd7b66 Added leave approver name field in leave application 2014-12-09 16:36:33 +05:30
Nabin Hait
f18d285eab Merge pull request #2473 from nabinhait/fix1
minor fix
2014-12-09 16:31:03 +05:30
Nabin Hait
7887ccb441 Credit days fix 2014-12-09 14:34:14 +05:30
Nabin Hait
d57b57a21d Minor fix in accounts receivable report 2014-12-09 11:56:13 +05:30
Nabin Hait
5cc0531d27 Merge pull request #2451 from revant/develop
"From time" cannot be later than "To time" and hours cannot be negative
2014-12-02 14:27:00 +05:30
Revant Nandgaonkar
0e5cdc8495 Merge branch 'develop' of https://github.com/revant/erpnext into develop 2014-12-02 14:21:15 +05:30
Revant Nandgaonkar
b80d892eab removed unecessary backslash 2014-12-02 14:19:29 +05:30
Revant Nandgaonkar
185af03fb2 Update time_log.py 2014-12-02 14:18:10 +05:30
Nabin Hait
abcbbc63d8 Merge pull request #2435 from nabinhait/fix1
Fixes in authorization rule based on average discount
2014-12-02 10:36:25 +05:30
Nabin Hait
6871c74ce1 Merge pull request #2444 from ankitjavalkarwork/contactmob
Display mobile no. of contact
2014-12-02 10:35:46 +05:30
Revant Nandgaonkar
d0a44ca85c Changed contact_date to Datetime so appointment or call with time can be scheduled 2014-12-01 23:31:53 +05:30
Revant Nandgaonkar
83db3e3ddb "From time" cannot be later than "To time" and hours cannot be negative 2014-12-01 16:53:29 +05:30
Nabin Hait
cc11045fd3 minor fix 2014-11-28 16:59:32 +05:30
Nabin Hait
1b5afe737f Fixes in authorization rule based on average discount 2014-11-28 16:59:32 +05:30
Rushabh Mehta
3d65d9602e [error-reports] 2014-11-28 14:58:43 +05:30
ankitjavalkarwork
9440d080d4 Print Hide Recurring Order/Invoice based fields 2014-11-27 17:28:53 +05:30
ankitjavalkarwork
9269c86339 Display mobile no of contact 2014-11-27 17:13:36 +05:30
Pratik Vyas
7c82d616c9 Merge branch 'develop' 2014-11-25 11:16:33 +05:30
Pratik Vyas
f227379d2f bumped to version 4.12.0 2014-11-25 11:46:33 +06:00
Nabin Hait
eba88919c1 Merge pull request #2431 from mayur-patel/patch-2
Update leave_application.py : Modified get_holidays function
2014-11-25 10:55:11 +05:30
Rushabh Mehta
3408432b50 Merge pull request #2428 from rmehta/translations-update
[translations] updated via frappe.io/translator
2014-11-25 10:54:36 +05:30
Rushabh Mehta
a0949158b7 [translations] updated via frappe.io/translator 2014-11-25 10:53:12 +05:30
Nabin Hait
ea91d2aaf1 Merge pull request #2429 from ankitjavalkarwork/expclaimname
Add configurable naming series to Expense claim
2014-11-25 10:51:03 +05:30
Rushabh Mehta
de992abf83 Merge pull request #2413 from Delte/patch-1
Update tr.csv
2014-11-25 10:49:51 +05:30
Mayur Patel
5d8635a8dc Update leave_application.py
See issue #2422 for more detail.
2014-11-24 16:57:53 +00:00
ankitjavalkarwork
7e911bae95 Add configurable naming series to Expense claim 2014-11-24 18:26:17 +05:30
Nabin Hait
0676cf6d3f Merge pull request #2430 from nabinhait/fix1
Multiple minor fixes
2014-11-24 18:21:37 +05:30
Nabin Hait
b74ae7aa31 Minor fix for order to invoice mapping 2014-11-24 18:17:01 +05:30
Nabin Hait
0ad7db3bbd Minor fix in salary slip net total calculation 2014-11-24 15:25:13 +05:30
Nabin Hait
db74e316d2 Validate serial no after auto-creation based on naming series 2014-11-24 15:25:13 +05:30
Nabin Hait
1897360e4b Set default language as English in setup wizard 2014-11-24 15:25:13 +05:30
Nabin Hait
e7fb957415 Merge pull request #2427 from rmehta/develop
[fix] client side queries
2014-11-24 15:23:27 +05:30
Rushabh Mehta
2f4567fa3c [minor] [ux] address refresh for lead 2014-11-24 15:18:40 +05:30
Rushabh Mehta
0a7abc188e [minor] [ux] contact template 2014-11-24 15:06:40 +05:30
Rushabh Mehta
5eeef7f065 [refactor] address and contact list in customer, supplier, lead, sales person 2014-11-24 14:16:51 +05:30
Rushabh Mehta
7d36875d6f [refactor] address and contact list in customer, supplier, lead, sales person 2014-11-24 14:16:47 +05:30
Delte
2fa718705a Update tr.csv
Typo & translation fix
2014-11-15 22:39:25 +02:00
Pratik Vyas
b1fdbf2335 Merge branch 'develop' 2014-11-14 15:27:34 +05:30
Pratik Vyas
2277922313 bumped to version 4.11.2 2014-11-14 15:57:34 +06:00
Nabin Hait
3e1029309c Merge pull request #2411 from nabinhait/fix1
minor fix
2014-11-14 15:19:51 +05:30
Nabin Hait
aa5deaa070 minor fix 2014-11-14 15:19:07 +05:30
Nabin Hait
6b5d51ca22 Merge pull request #2402 from jorxzpagta/patch-1
Update supplier.js [Displaying Messages on the Communation History]
2014-11-14 15:05:11 +05:30
Nabin Hait
2c114b5bb5 Merge pull request #2407 from ankitjavalkarwork/packingsliphead
Add letterhead field and mapper in Packing Slip
2014-11-14 14:50:28 +05:30
Nabin Hait
bd38a79e5e Merge pull request #2410 from nabinhait/fix1
Minor fixes
2014-11-14 14:48:02 +05:30
Nabin Hait
ccd9fd3e94 Rounding in totals calculation 2014-11-14 14:27:24 +05:30
Nabin Hait
4215b3afc3 temporary fix in payment tool 2014-11-14 10:51:31 +05:30
ankitjavalkarwork
f60f111afe Add letterhead field and mapper in Packing Slip 2014-11-13 17:28:42 +05:30
jorxzpagta
6fe0a3cee3 Update supplier.js
Display Messages on the Communication History
2014-11-12 17:02:06 +08:00
Nabin Hait
f004077734 Map only pending qty from Material Request to Purchase Order/Stock Entry 2014-11-11 10:51:41 +05:30
Nabin Hait
6c5cfd2148 Merge pull request #2396 from nabinhait/fix1
Reference / Cheque date is after due date
2014-11-10 18:07:52 +05:30
Nabin Hait
6c1011df92 Reference / Cheque date is after due date 2014-11-10 14:57:53 +05:30
Pratik Vyas
1582a0ce78 Merge branch 'develop' 2014-11-10 12:38:45 +05:30
Pratik Vyas
b5b821363d bumped to version 4.11.1 2014-11-10 13:08:45 +06:00
Nabin Hait
399afc87ef Merge pull request #2379 from nathando/develop
Remove get_server_field from leave_application
2014-11-10 12:05:40 +05:30
Nabin Hait
8c842af172 Merge pull request #2393 from nabinhait/fix1
Credit days and payment tool fixes
2014-11-10 11:44:37 +05:30
Nabin Hait
bf836277f9 Payment tool fix: get outstanding sales orders 2014-11-10 11:28:25 +05:30
Nabin Hait
10d1806d81 Credit days validation fixes 2014-11-10 11:11:58 +05:30
Pratik Vyas
bc41ce95fc Merge branch 'develop' 2014-11-06 14:36:51 +05:30
Pratik Vyas
4948d336c4 bumped to version 4.11.0 2014-11-06 15:06:51 +06:00
Nabin Hait
be2527d93d Merge pull request #2386 from nabinhait/fix1
Translation fixed for Croatia
2014-11-06 12:52:59 +05:30
Nabin Hait
7f5bb1c8aa Translation fixed for Croatia 2014-11-06 12:51:27 +05:30
Pratik Vyas
a8d40e4409 Merge branch 'develop' 2014-11-05 14:15:47 +05:30
Pratik Vyas
e9b4686fec bumped to version 4.10.0 2014-11-05 14:45:47 +06:00
Nabin Hait
5086ef2499 Update update_requested_and_ordered_qty.py 2014-11-05 12:33:29 +05:30
Nathan Do
8a55d9a795 Remove get_server_field from leave_application
- Make get_holidays and get_total_leave_days global to module
- Replace get_server_field with using whitelisted function
get_total_leave_days
2014-11-05 12:32:57 +08:00
Nabin Hait
1caca80203 Merge pull request #2378 from nabinhait/fix1
Requested and ordered qty calculation
2014-11-04 18:06:00 +05:30
Nabin Hait
9114c26857 Patch to recalculate requested qty and ordered qty for all items 2014-11-04 15:34:03 +05:30
Nabin Hait
941a965af4 Ordered qty calculation logic 2014-11-04 15:34:03 +05:30
Nabin Hait
4acd431b92 Requested qty calculation logic 2014-11-04 15:34:03 +05:30
Nabin Hait
fad0d566f9 Payment receipt voucher print format fixed 2014-11-04 15:34:03 +05:30
Pratik Vyas
e2d4079363 Merge branch 'develop' 2014-11-03 16:04:30 +05:30
Pratik Vyas
b9ce1f590b bumped to version 4.9.3 2014-11-03 16:34:29 +06:00
Nabin Hait
36463ed790 Merge pull request #2375 from nabinhait/fix1
Check credit limit only if customer debited
2014-11-03 15:55:03 +05:30
Nabin Hait
3c8838816d Check credit limit only if customer debited 2014-11-03 15:49:29 +05:30
Nabin Hait
11e50a8eee Merge pull request #2366 from ankitjavalkarwork/fixprinthideamt
Hide totals in DN, Auto set Bank/Cash acc. in JV
2014-11-03 15:38:45 +05:30
Nabin Hait
9de4c60bd6 Merge pull request #2374 from nabinhait/fix1
minor fix
2014-11-03 15:37:51 +05:30
Nabin Hait
5288bdeabb Minor fix 2014-11-03 15:08:21 +05:30
ankitjavalkarwork
f5804438bb Auto set default bank/cash account on select of Bank/Cash Voucher in JV 2014-11-03 12:23:55 +05:30
ankitjavalkarwork
6e06357dc5 Hide totals on checking print_without_amount field in DN 2014-11-03 11:57:44 +05:30
Nabin Hait
28913b97b0 [fix] Null issue fixed in stock analytics report 2014-10-31 14:46:25 +05:30
Pratik Vyas
c59cd46391 Merge branch 'develop' 2014-10-30 14:22:17 +05:30
Pratik Vyas
dda239fd49 bumped to version 4.9.2 2014-10-30 14:52:17 +06:00
Nabin Hait
b86a6ce26a Merge pull request #2358 from nabinhait/fix1
[fix] Floating point issue fixed in payment reconciliation
2014-10-29 14:26:41 +05:30
Nabin Hait
ee212e7bb5 [fix] Floating point issue fixed in payment reconciliation 2014-10-29 14:26:05 +05:30
Nabin Hait
4952c7b3b5 Merge pull request #2343 from ankitjavalkarwork/fixcustissue
Fix Customer Issue error on click event of Serial No. field
2014-10-27 11:40:18 +05:30
ankitjavalkarwork
4e61536f50 Fix Customer Issue error on click event of Serial No. field 2014-10-27 11:08:05 +05:30
Pratik Vyas
f2886f152b Merge pull request #2348 from pdvyas/fix-pdf-test
Fix PDF test
2014-10-27 10:47:00 +05:30
Pratik Vyas
b5c56f6cea [minor] add port to test site 2014-10-27 09:51:08 +05:30
Pratik Vyas
80e95388f5 Merge branch 'develop' 2014-10-27 09:26:36 +05:30
Pratik Vyas
daed0b655a bumped to version 4.9.1 2014-10-27 09:56:36 +06:00
Nabin Hait
fbb994c731 Merge pull request #2344 from nabinhait/fix1
cost center based on project
2014-10-23 13:30:51 +05:30
Nabin Hait
10b155a486 cost center based on project 2014-10-23 13:18:59 +05:30
Nabin Hait
ce6eda709b Merge pull request #2342 from ankitjavalkarwork/fixtimelogui
Change position of 'To Time' field for better UX
2014-10-22 16:57:52 +05:30
ankitjavalkarwork
14e1d20df3 Change position of 'To Time' field for better UX 2014-10-22 16:55:29 +05:30
Pratik Vyas
da8a02d56e Merge branch 'develop' 2014-10-22 14:19:17 +05:30
Pratik Vyas
16343683d9 bumped to version 4.9.0 2014-10-22 14:49:17 +06:00
Nabin Hait
2bdc017aff Merge pull request #2339 from nabinhait/fix1
Minor fixes
2014-10-22 13:11:21 +05:30
Nabin Hait
16e05c321c Removed stock ageing grid report 2014-10-22 13:10:43 +05:30
Nabin Hait
23d7919865 Stock ageing report fix 2014-10-22 13:06:26 +05:30
Nabin Hait
38265efc39 Minor fix 2014-10-21 20:23:39 +05:30
Rushabh Mehta
2d414706dc [hotfix] translation boo boo 2014-10-21 11:49:40 +05:30
Rushabh Mehta
d85e4b0d46 Merge pull request #2331 from rmehta/translation
[translations] update
2014-10-20 17:12:22 +05:30
Rushabh Mehta
45d03af8f6 [translations] update 2014-10-20 17:11:06 +05:30
Nabin Hait
73a3a2a131 Merge pull request #2327 from nabinhait/stock_reco
Fixes in credit note and quotation
2014-10-20 11:51:01 +05:30
Nabin Hait
73804580d4 validate quotation to lead or customer 2014-10-20 11:18:11 +05:30
Nabin Hait
259f9779db Credit Note: Set total amount and print format fix 2014-10-20 11:18:11 +05:30
Pratik Vyas
14e0e58a7d Merge branch 'develop' 2014-10-17 15:04:05 +05:30
Pratik Vyas
5eb373f7b5 bumped to version 4.8.0 2014-10-17 15:34:05 +06:00
Nabin Hait
4595c30a7b Merge pull request #2322 from nabinhait/stock_reco
Partial payment reconciliation
2014-10-17 15:01:13 +05:30
Nabin Hait
fc2dd44694 Partial payment reconciliation. Fixes #1982 2014-10-17 14:57:20 +05:30
Pratik Vyas
053c54017e [minor] add admin password to travis test site 2014-10-17 14:16:10 +05:30
123 changed files with 7326 additions and 7664 deletions

View File

@@ -1 +1 @@
__version__ = '4.7.2'
__version__ = '4.15.4'

View File

@@ -3,7 +3,7 @@
from __future__ import unicode_literals
import frappe
from frappe.utils import flt, cstr, cint, getdate, add_days, formatdate
from frappe.utils import flt, cstr, cint, getdate
from frappe import msgprint, throw, _
from frappe.model.document import Document
@@ -176,15 +176,7 @@ class Account(Document):
frappe.throw(_("Due Date cannot be before Posting Date"))
elif credit_days is not None and diff > credit_days:
is_credit_controller = frappe.db.get_value("Accounts Settings", None,
"credit_controller") in frappe.user.get_roles()
if is_credit_controller:
msgprint(_("Note: Due Date exceeds the allowed credit days by {0} day(s)").format(
diff - credit_days))
else:
max_due_date = formatdate(add_days(posting_date, credit_days))
frappe.throw(_("Due Date cannot be after {0}").format(max_due_date))
msgprint(_("Note: Due Date exceeds the allowed credit days by {0} day(s)").format(diff - credit_days))
def validate_trash(self):
"""checks gl entries and if child exists"""

View File

@@ -124,6 +124,10 @@ def update_outstanding_amt(account, against_voucher_type, against_voucher, on_ca
from `tabGL Entry` where voucher_type = 'Journal Voucher' and voucher_no = %s
and account = %s and ifnull(against_voucher, '') = ''""",
(against_voucher, account))[0][0])
if not against_voucher_amount:
frappe.throw(_("Against Journal Voucher {0} is already adjusted against some other voucher")
.format(against_voucher))
bal = against_voucher_amount + bal
if against_voucher_amount < 0:
bal = -bal

View File

@@ -213,10 +213,11 @@ cur_frm.cscript.voucher_type = function(doc, cdt, cdn) {
return;
var update_jv_details = function(doc, r) {
$.each(r.message, function(i, d) {
var jvdetail = frappe.model.add_child(doc, "Journal Voucher Detail", "entries");
jvdetail.account = d.account;
jvdetail.balance = d.balance;
var jvdetail = frappe.model.add_child(doc, "Journal Voucher Detail", "entries");
$.each(r, function(i, d) {
var row = frappe.model.add_child(doc, "Journal Voucher Detail", "entries");
row.account = d.account;
row.balance = d.balance;
});
refresh_field("entries");
}
@@ -231,7 +232,7 @@ cur_frm.cscript.voucher_type = function(doc, cdt, cdn) {
},
callback: function(r) {
if(r.message) {
update_jv_details(doc, r);
update_jv_details(doc, [r.message]);
}
}
})
@@ -245,7 +246,7 @@ cur_frm.cscript.voucher_type = function(doc, cdt, cdn) {
callback: function(r) {
frappe.model.clear_table(doc, "entries");
if(r.message) {
update_jv_details(doc, r);
update_jv_details(doc, r.message);
}
cur_frm.set_value("is_opening", "Yes")
}

View File

@@ -4,7 +4,7 @@
from __future__ import unicode_literals
import frappe
from frappe.utils import cint, cstr, flt, fmt_money, formatdate, getdate
from frappe.utils import cstr, flt, fmt_money, formatdate, getdate
from frappe import msgprint, _, scrub
from erpnext.setup.utils import get_company_currency
@@ -13,10 +13,6 @@ from erpnext.controllers.accounts_controller import AccountsController
class JournalVoucher(AccountsController):
def __init__(self, arg1, arg2=None):
super(JournalVoucher, self).__init__(arg1, arg2)
self.master_type = {}
self.credit_days_for = {}
self.credit_days_global = -1
self.is_approving_authority = -1
def validate(self):
if not self.is_opening:
@@ -40,7 +36,7 @@ class JournalVoucher(AccountsController):
def on_submit(self):
if self.voucher_type in ['Bank Voucher', 'Contra Voucher', 'Journal Entry']:
self.check_credit_days()
self.check_reference_date()
self.make_gl_entries()
self.check_credit_limit()
self.update_advance_paid()
@@ -88,15 +84,24 @@ class JournalVoucher(AccountsController):
def validate_against_jv(self):
for d in self.get('entries'):
if d.against_jv:
account_root_type = frappe.db.get_value("Account", d.account, "root_type")
if account_root_type == "Asset" and flt(d.debit) > 0:
frappe.throw(_("For {0}, only credit entries can be linked against another debit entry")
.format(d.account))
elif account_root_type == "Liability" and flt(d.credit) > 0:
frappe.throw(_("For {0}, only debit entries can be linked against another credit entry")
.format(d.account))
if d.against_jv == self.name:
frappe.throw(_("You can not enter current voucher in 'Against Journal Voucher' column"))
against_entries = frappe.db.sql("""select * from `tabJournal Voucher Detail`
where account = %s and docstatus = 1 and parent = %s
and ifnull(against_jv, '') = ''""", (d.account, d.against_jv), as_dict=True)
and ifnull(against_jv, '') = '' and ifnull(against_invoice, '') = ''
and ifnull(against_voucher, '') = ''""", (d.account, d.against_jv), as_dict=True)
if not against_entries:
frappe.throw(_("Journal Voucher {0} does not have account {1} or already matched")
frappe.throw(_("Journal Voucher {0} does not have account {1} or already matched against other voucher")
.format(d.against_jv, d.account))
else:
dr_or_cr = "debit" if d.credit > 0 else "credit"
@@ -153,7 +158,7 @@ class JournalVoucher(AccountsController):
and voucher_account != d.account:
frappe.throw(_("Row {0}: Account {1} does not match with {2} {3} account") \
.format(d.idx, d.account, doctype, field_dict.get(doctype)))
if against_field in ["against_sales_order", "against_purchase_order"]:
if voucher_account != account_master_name:
frappe.throw(_("Row {0}: Account {1} does not match with {2} {3} Name") \
@@ -165,7 +170,7 @@ class JournalVoucher(AccountsController):
def validate_against_invoice_fields(self, doctype, payment_against_voucher):
for voucher_no, payment_list in payment_against_voucher.items():
voucher_properties = frappe.db.get_value(doctype, voucher_no,
voucher_properties = frappe.db.get_value(doctype, voucher_no,
["docstatus", "outstanding_amount"])
if voucher_properties[0] != 1:
@@ -177,7 +182,7 @@ class JournalVoucher(AccountsController):
def validate_against_order_fields(self, doctype, payment_against_voucher):
for voucher_no, payment_list in payment_against_voucher.items():
voucher_properties = frappe.db.get_value(doctype, voucher_no,
voucher_properties = frappe.db.get_value(doctype, voucher_no,
["docstatus", "per_billed", "status", "advance_paid", "grand_total"])
if voucher_properties[0] != 1:
@@ -280,71 +285,38 @@ class JournalVoucher(AccountsController):
def set_print_format_fields(self):
for d in self.get('entries'):
result = frappe.db.get_value("Account", d.account,
["account_type", "master_type"])
acc = frappe.db.get_value("Account", d.account, ["account_type", "master_type"], as_dict=1)
if not result:
continue
if not acc: continue
account_type, master_type = result
if master_type in ['Supplier', 'Customer']:
if acc.master_type in ['Supplier', 'Customer']:
if not self.pay_to_recd_from:
self.pay_to_recd_from = frappe.db.get_value(master_type,
' - '.join(d.account.split(' - ')[:-1]),
master_type == 'Customer' and 'customer_name' or 'supplier_name')
self.pay_to_recd_from = frappe.db.get_value(acc.master_type, ' - '.join(d.account.split(' - ')[:-1]),
acc.master_type == 'Customer' and 'customer_name' or 'supplier_name')
if self.voucher_type in ["Credit Note", "Debit Note"]:
self.set_total_amount(d.debit or d.credit)
if account_type in ['Bank', 'Cash']:
company_currency = get_company_currency(self.company)
amt = flt(d.debit) and d.debit or d.credit
self.total_amount = fmt_money(amt, currency=company_currency)
from frappe.utils import money_in_words
self.total_amount_in_words = money_in_words(amt, company_currency)
if acc.account_type in ['Bank', 'Cash']:
self.set_total_amount(d.debit or d.credit)
def check_credit_days(self):
date_diff = 0
def set_total_amount(self, amt):
company_currency = get_company_currency(self.company)
self.total_amount = fmt_money(amt, currency=company_currency)
from frappe.utils import money_in_words
self.total_amount_in_words = money_in_words(amt, company_currency)
def check_reference_date(self):
if self.cheque_date:
date_diff = (getdate(self.cheque_date)-getdate(self.posting_date)).days
for d in self.get("entries"):
due_date = None
if d.against_invoice and flt(d.credit) > 0:
due_date = frappe.db.get_value("Sales Invoice", d.against_invoice, "due_date")
elif d.against_voucher and flt(d.debit) > 0:
due_date = frappe.db.get_value("Purchase Invoice", d.against_voucher, "due_date")
if date_diff <= 0: return
# Get List of Customer Account
acc_list = filter(lambda d: frappe.db.get_value("Account", d.account,
"master_type")=='Customer', self.get('entries'))
for d in acc_list:
credit_days = self.get_credit_days_for(d.account)
# Check credit days
if credit_days > 0 and not self.get_authorized_user() and cint(date_diff) > credit_days:
msgprint(_("Maximum allowed credit is {0} days after posting date").format(credit_days),
raise_exception=1)
def get_credit_days_for(self, ac):
if not self.credit_days_for.has_key(ac):
self.credit_days_for[ac] = cint(frappe.db.get_value("Account", ac, "credit_days"))
if not self.credit_days_for[ac]:
if self.credit_days_global==-1:
self.credit_days_global = cint(frappe.db.get_value("Company",
self.company, "credit_days"))
return self.credit_days_global
else:
return self.credit_days_for[ac]
def get_authorized_user(self):
if self.is_approving_authority==-1:
self.is_approving_authority = 0
# Fetch credit controller role
approving_authority = frappe.db.get_value("Accounts Settings", None,
"credit_controller")
# Check logged-in user is authorized
if approving_authority in frappe.user.get_roles():
self.is_approving_authority = 1
return self.is_approving_authority
if due_date and getdate(self.cheque_date) > getdate(due_date):
msgprint(_("Note: Reference Date {0} is after invoice due date {1}")
.format(formatdate(self.cheque_date), formatdate(due_date)))
def make_gl_entries(self, cancel=0, adv_adj=0):
from erpnext.accounts.general_ledger import make_gl_entries
@@ -377,7 +349,7 @@ class JournalVoucher(AccountsController):
for d in self.get("entries"):
master_type, master_name = frappe.db.get_value("Account", d.account,
["master_type", "master_name"])
if master_type == "Customer" and master_name:
if master_type == "Customer" and master_name and flt(d.debit) > 0:
super(JournalVoucher, self).check_credit_limit(d.account)
def get_balance(self):
@@ -532,9 +504,10 @@ def get_against_sales_invoice(doctype, txt, searchfield, start, page_len, filter
(filters["account"], "%%%s%%" % txt, start, page_len))
def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql("""select jv.name, jv.posting_date, jv.user_remark
from `tabJournal Voucher` jv, `tabJournal Voucher Detail` jv_detail
where jv_detail.parent = jv.name and jv_detail.account = %s and jv.docstatus = 1
return frappe.db.sql("""select distinct jv.name, jv.posting_date, jv.user_remark
from `tabJournal Voucher` jv, `tabJournal Voucher Detail` jvd
where jvd.parent = jv.name and jvd.account = %s and jv.docstatus = 1
and (ifnull(jvd.against_invoice, '') = '' and ifnull(jvd.against_voucher, '') = '' and ifnull(jvd.against_jv, '') = '' )
and jv.%s like %s order by jv.name desc limit %s, %s""" %
("%s", searchfield, "%s", "%s", "%s"),
(filters["account"], "%%%s%%" % txt, start, page_len))

View File

@@ -19,9 +19,9 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
]
};
}
});
this.frm.set_query('bank_cash_account', function() {
if(!me.frm.doc.company) {
msgprint(__("Please select company first"));
@@ -35,12 +35,8 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
};
}
});
var help_content = '<i class="icon-hand-right"></i> ' + __("Note") + ':<br>'+
'<ul>' + __("If you are unable to match the exact amount, then amend your Journal Voucher and split rows such that payment amount match the invoice amount.") + '</ul>';
this.frm.set_value("reconcile_help", help_content);
},
get_unreconciled_entries: function() {
var me = this;
return this.frm.call({
@@ -48,12 +44,12 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
method: 'get_unreconciled_entries',
callback: function(r, rt) {
var invoices = [];
$.each(me.frm.doc.payment_reconciliation_invoices || [], function(i, row) {
if (row.invoice_number && !inList(invoices, row.invoice_number))
if (row.invoice_number && !inList(invoices, row.invoice_number))
invoices.push(row.invoice_number);
});
frappe.meta.get_docfield("Payment Reconciliation Payment", "invoice_number",
me.frm.doc.name).options = invoices.join("\n");
@@ -79,4 +75,4 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
$.extend(cur_frm.cscript, new erpnext.accounts.PaymentReconciliationController({frm: cur_frm}));
cur_frm.add_fetch('party_account', 'master_type', 'party_type')
cur_frm.add_fetch('party_account', 'master_type', 'party_type')

View File

@@ -118,19 +118,12 @@
"options": "Payment Reconciliation Invoice",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "reconcile_help",
"fieldtype": "Small Text",
"label": "",
"permlevel": 0,
"read_only": 1
}
],
"hide_toolbar": 1,
"icon": "icon-resize-horizontal",
"issingle": 1,
"modified": "2014-07-31 05:43:03.410832",
"modified": "2014-10-16 17:51:44.367107",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Reconciliation",

View File

@@ -96,13 +96,14 @@ class PaymentReconciliation(Document):
payment_amount = payment_amount[0][0] if payment_amount else 0
if d.invoice_amount > payment_amount:
if d.invoice_amount - payment_amount > 0.005:
non_reconciled_invoices.append({
'voucher_no': d.voucher_no,
'voucher_type': d.voucher_type,
'posting_date': d.posting_date,
'invoice_amount': flt(d.invoice_amount),
'outstanding_amount': d.invoice_amount - payment_amount})
'outstanding_amount': flt(d.invoice_amount - payment_amount, 2)
})
self.add_invoice_entries(non_reconciled_invoices)
@@ -124,7 +125,7 @@ class PaymentReconciliation(Document):
dr_or_cr = "credit" if self.party_type == "Customer" else "debit"
lst = []
for e in self.get('payment_reconciliation_payments'):
if e.invoice_type and e.invoice_number:
if e.invoice_type and e.invoice_number and e.allocated_amount:
lst.append({
'voucher_no' : e.journal_voucher,
'voucher_detail_no' : e.voucher_detail_number,
@@ -134,7 +135,7 @@ class PaymentReconciliation(Document):
'is_advance' : e.is_advance,
'dr_or_cr' : dr_or_cr,
'unadjusted_amt' : flt(e.amount),
'allocated_amt' : flt(e.amount)
'allocated_amt' : flt(e.allocated_amount)
})
if lst:
@@ -162,18 +163,23 @@ class PaymentReconciliation(Document):
invoices_to_reconcile = []
for p in self.get("payment_reconciliation_payments"):
if p.invoice_type and p.invoice_number:
if p.invoice_type and p.invoice_number and p.allocated_amount:
invoices_to_reconcile.append(p.invoice_number)
if p.invoice_number not in unreconciled_invoices.get(p.invoice_type, {}):
frappe.throw(_("{0}: {1} not found in Invoice Details table")
.format(p.invoice_type, p.invoice_number))
if p.amount > unreconciled_invoices.get(p.invoice_type, {}).get(p.invoice_number):
frappe.throw(_("Row {0}: Payment amount must be less than or equals to invoice outstanding amount. Please refer Note below.").format(p.idx))
if flt(p.allocated_amount) > flt(p.amount):
frappe.throw(_("Row {0}: Allocated amount {1} must be less than or equals to JV amount {2}")
.format(p.idx, p.allocated_amount, p.amount))
if flt(p.allocated_amount) > unreconciled_invoices.get(p.invoice_type, {}).get(p.invoice_number):
frappe.throw(_("Row {0}: Allocated amount {1} must be less than or equals to invoice outstanding amount {2}")
.format(p.idx, p.allocated_amount, unreconciled_invoices.get(p.invoice_type, {}).get(p.invoice_number)))
if not invoices_to_reconcile:
frappe.throw(_("Please select Invoice Type and Invoice Number in atleast one row"))
frappe.throw(_("Please select Allocated Amount, Invoice Type and Invoice Number in atleast one row"))
def check_condition(self, dr_or_cr):
cond = self.from_date and " and posting_date >= '" + self.from_date + "'" or ""

View File

@@ -53,11 +53,20 @@
"label": "Column Break",
"permlevel": 0
},
{
"fieldname": "allocated_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Allocated amount",
"permlevel": 0,
"precision": "",
"reqd": 1
},
{
"default": "Sales Invoice",
"fieldname": "invoice_type",
"fieldtype": "Select",
"in_list_view": 1,
"in_list_view": 0,
"label": "Invoice Type",
"options": "\nSales Invoice\nPurchase Invoice\nJournal Voucher",
"permlevel": 0,
@@ -95,7 +104,7 @@
}
],
"istable": 1,
"modified": "2014-07-21 16:53:56.206169",
"modified": "2014-10-16 17:40:54.040194",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Reconciliation Payment",

View File

@@ -42,9 +42,6 @@ frappe.ui.form.on("Payment Tool", "received_or_paid", function(frm) {
erpnext.payment_tool.check_mandatory_to_set_button(frm);
});
// Fetch bank/cash account based on payment mode
cur_frm.add_fetch("payment_mode", "default_account", "payment_account");
// Set party account name
frappe.ui.form.on("Payment Tool", "customer", function(frm) {
erpnext.payment_tool.set_party_account(frm);

View File

@@ -3,7 +3,7 @@
from __future__ import unicode_literals
import frappe
from frappe import _, scrub
from frappe import _
from frappe.utils import flt
from frappe.model.document import Document
import json
@@ -93,7 +93,7 @@ def get_orders_to_be_billed(party_type, party_name):
and docstatus = 1
and ifnull(status, "") != "Stopped"
and ifnull(grand_total, 0) > ifnull(advance_paid, 0)
and ifnull(per_billed, 0) < 100.0
and abs(100 - ifnull(per_billed, 0)) > 0.01
""" % (voucher_type, 'customer' if party_type == "Customer" else 'supplier', '%s'),
party_name, as_dict = True)

View File

@@ -800,7 +800,8 @@
"fieldtype": "Date",
"label": "From Date",
"no_copy": 1,
"permlevel": 0
"permlevel": 0,
"print_hide": 1
},
{
"allow_on_submit": 1,
@@ -810,7 +811,8 @@
"fieldtype": "Date",
"label": "To Date",
"no_copy": 1,
"permlevel": 0
"permlevel": 0,
"print_hide": 1
},
{
"allow_on_submit": 1,
@@ -878,7 +880,7 @@
"icon": "icon-file-text",
"idx": 1,
"is_submittable": 1,
"modified": "2014-10-08 14:23:20.234176",
"modified": "2014-11-27 17:28:20.133701",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Purchase Invoice",

View File

@@ -233,6 +233,11 @@ erpnext.POS = Class.extend({
},
make_item_list: function() {
var me = this;
if(!this.price_list) {
msgprint(__("Price List not found or disabled"));
return;
}
me.item_timeout = null;
frappe.call({
method: 'erpnext.accounts.doctype.sales_invoice.pos.get_items',
@@ -487,7 +492,7 @@ erpnext.POS = Class.extend({
});
me.refresh_delete_btn();
if(me.frm.doc[this.party]) {
if(me.frm.doc[this.party.toLowerCase()]) {
this.barcode.$input.focus();
} else {
this.party_field.$input.focus();

View File

@@ -225,8 +225,7 @@ $.extend(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_
// Hide Fields
// ------------
cur_frm.cscript.hide_fields = function(doc) {
par_flds = ['project_name', 'due_date', 'is_opening', 'source', 'total_advance', 'gross_profit',
'gross_profit_percent', 'get_advances_received',
par_flds = ['project_name', 'due_date', 'is_opening', 'source', 'total_advance', 'get_advances_received',
'advance_adjustment_details', 'sales_partner', 'commission_rate',
'total_commission', 'advances', 'from_date', 'to_date'];

View File

@@ -568,27 +568,6 @@
"print_hide": 0,
"read_only": 1
},
{
"fieldname": "gross_profit",
"fieldtype": "Currency",
"label": "Gross Profit",
"oldfieldname": "gross_profit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 1,
"read_only": 1
},
{
"fieldname": "gross_profit_percent",
"fieldtype": "Float",
"label": "Gross Profit (%)",
"oldfieldname": "gross_profit_percent",
"oldfieldtype": "Currency",
"permlevel": 0,
"print_hide": 1,
"read_only": 1
},
{
"fieldname": "advances",
"fieldtype": "Section Break",
@@ -1213,7 +1192,7 @@
"icon": "icon-file-text",
"idx": 1,
"is_submittable": 1,
"modified": "2014-10-10 16:54:22.284284",
"modified": "2014-12-11 16:26:12.402110",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice",

View File

@@ -1,155 +1,156 @@
{
"autoname": "INVTD.######",
"creation": "2013-04-24 11:39:32",
"docstatus": 0,
"doctype": "DocType",
"autoname": "INVTD.######",
"creation": "2013-04-24 11:39:32",
"docstatus": 0,
"doctype": "DocType",
"fields": [
{
"fieldname": "charge_type",
"fieldtype": "Select",
"in_list_view": 1,
"label": "Type",
"oldfieldname": "charge_type",
"oldfieldtype": "Select",
"options": "\nActual\nOn Net Total\nOn Previous Row Amount\nOn Previous Row Total",
"permlevel": 0,
"fieldname": "charge_type",
"fieldtype": "Select",
"in_list_view": 1,
"label": "Type",
"oldfieldname": "charge_type",
"oldfieldtype": "Select",
"options": "\nActual\nOn Net Total\nOn Previous Row Amount\nOn Previous Row Total",
"permlevel": 0,
"reqd": 1
},
},
{
"depends_on": "eval:[\"On Previous Row Amount\", \"On Previous Row Total\"].indexOf(doc.charge_type)!==-1",
"fieldname": "row_id",
"fieldtype": "Data",
"hidden": 0,
"label": "Reference Row #",
"oldfieldname": "row_id",
"oldfieldtype": "Data",
"depends_on": "eval:[\"On Previous Row Amount\", \"On Previous Row Total\"].indexOf(doc.charge_type)!==-1",
"fieldname": "row_id",
"fieldtype": "Data",
"hidden": 0,
"label": "Reference Row #",
"oldfieldname": "row_id",
"oldfieldtype": "Data",
"permlevel": 0
},
},
{
"fieldname": "description",
"fieldtype": "Small Text",
"in_list_view": 1,
"label": "Description",
"oldfieldname": "description",
"oldfieldtype": "Small Text",
"permlevel": 0,
"print_width": "300px",
"reqd": 1,
"fieldname": "description",
"fieldtype": "Small Text",
"in_list_view": 1,
"label": "Description",
"oldfieldname": "description",
"oldfieldtype": "Small Text",
"permlevel": 0,
"print_width": "300px",
"reqd": 1,
"width": "300px"
},
},
{
"fieldname": "col_break_1",
"fieldtype": "Column Break",
"permlevel": 0,
"fieldname": "col_break_1",
"fieldtype": "Column Break",
"permlevel": 0,
"width": "50%"
},
},
{
"fieldname": "account_head",
"fieldtype": "Link",
"in_list_view": 0,
"label": "Account Head",
"oldfieldname": "account_head",
"oldfieldtype": "Link",
"options": "Account",
"permlevel": 0,
"reqd": 1,
"fieldname": "account_head",
"fieldtype": "Link",
"in_list_view": 0,
"label": "Account Head",
"oldfieldname": "account_head",
"oldfieldtype": "Link",
"options": "Account",
"permlevel": 0,
"reqd": 1,
"search_index": 1
},
},
{
"default": ":Company",
"fieldname": "cost_center",
"fieldtype": "Link",
"in_list_view": 0,
"label": "Cost Center",
"oldfieldname": "cost_center_other_charges",
"oldfieldtype": "Link",
"options": "Cost Center",
"default": ":Company",
"fieldname": "cost_center",
"fieldtype": "Link",
"in_list_view": 0,
"label": "Cost Center",
"oldfieldname": "cost_center_other_charges",
"oldfieldtype": "Link",
"options": "Cost Center",
"permlevel": 0
},
},
{
"fieldname": "rate",
"fieldtype": "Float",
"in_list_view": 1,
"label": "Rate",
"oldfieldname": "rate",
"oldfieldtype": "Currency",
"permlevel": 0,
"fieldname": "rate",
"fieldtype": "Float",
"in_list_view": 1,
"label": "Rate",
"oldfieldname": "rate",
"oldfieldtype": "Currency",
"permlevel": 0,
"reqd": 1
},
},
{
"fieldname": "tax_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Amount",
"oldfieldname": "tax_amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"permlevel": 0,
"read_only": 1,
"fieldname": "tax_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Amount",
"oldfieldname": "tax_amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"permlevel": 0,
"read_only": 1,
"reqd": 0
},
},
{
"fieldname": "total",
"fieldtype": "Currency",
"label": "Total",
"oldfieldname": "total",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"permlevel": 0,
"fieldname": "total",
"fieldtype": "Currency",
"label": "Total",
"oldfieldname": "total",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"permlevel": 0,
"read_only": 1
},
},
{
"allow_on_submit": 0,
"description": "If checked, the tax amount will be considered as already included in the Print Rate / Print Amount",
"fieldname": "included_in_print_rate",
"fieldtype": "Check",
"label": "Is this Tax included in Basic Rate?",
"no_copy": 0,
"permlevel": 0,
"print_hide": 1,
"print_width": "150px",
"report_hide": 1,
"allow_on_submit": 0,
"description": "If checked, the tax amount will be considered as already included in the Print Rate / Print Amount",
"fieldname": "included_in_print_rate",
"fieldtype": "Check",
"label": "Is this Tax included in Basic Rate?",
"no_copy": 0,
"permlevel": 0,
"print_hide": 1,
"print_width": "150px",
"report_hide": 1,
"width": "150px"
},
},
{
"fieldname": "tax_amount_after_discount_amount",
"fieldtype": "Currency",
"hidden": 1,
"label": "Tax Amount After Discount Amount",
"options": "Company:company:default_currency",
"permlevel": 0,
"depends_on": "eval:parent.discount_amount",
"fieldname": "tax_amount_after_discount_amount",
"fieldtype": "Currency",
"hidden": 0,
"label": "Tax Amount After Discount Amount",
"options": "Company:company:default_currency",
"permlevel": 0,
"read_only": 1
},
},
{
"fieldname": "item_wise_tax_detail",
"fieldtype": "Small Text",
"hidden": 1,
"label": "Item Wise Tax Detail",
"oldfieldname": "item_wise_tax_detail",
"oldfieldtype": "Small Text",
"permlevel": 0,
"fieldname": "item_wise_tax_detail",
"fieldtype": "Small Text",
"hidden": 1,
"label": "Item Wise Tax Detail",
"oldfieldname": "item_wise_tax_detail",
"oldfieldtype": "Small Text",
"permlevel": 0,
"read_only": 1
},
},
{
"fieldname": "parenttype",
"fieldtype": "Data",
"hidden": 1,
"in_filter": 1,
"label": "Parenttype",
"oldfieldname": "parenttype",
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 1,
"fieldname": "parenttype",
"fieldtype": "Data",
"hidden": 1,
"in_filter": 1,
"label": "Parenttype",
"oldfieldname": "parenttype",
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 1,
"search_index": 1
}
],
"hide_heading": 1,
"idx": 1,
"istable": 1,
"modified": "2014-05-30 03:43:39.740638",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Taxes and Charges",
"owner": "Administrator",
],
"hide_heading": 1,
"idx": 1,
"istable": 1,
"modified": "2014-12-10 12:26:41.222471",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Taxes and Charges",
"owner": "Administrator",
"permissions": []
}
}

View File

@@ -4,9 +4,9 @@
"doc_type": "Journal Voucher",
"docstatus": 0,
"doctype": "Print Format",
"html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Credit Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Credit To\"), doc.pay_to_recd_from),\n (_(\"Date\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Amount\"), \"<strong>\" + doc.total_amount + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n\n <div class=\"row\">\n <div class=\"col-sm-3\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-sm-9\">{{ value }}</div>\n </div>\n\n {%- endfor -%}\n\n <hr>\n <br>\n <p class=\"strong\">\n {{ _(\"For\") }} {{ doc.company }},<br>\n <br>\n <br>\n <br>\n {{ _(\"Authorized Signatory\") }}\n </p>\n</div>\n\n\n",
"html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Credit Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Credit To\"), doc.pay_to_recd_from),\n (_(\"Date\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Amount\"), \"<strong>\" + frappe.utils.cstr(doc.total_amount) + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n\n <div class=\"row\">\n <div class=\"col-sm-3\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-sm-9\">{{ value }}</div>\n </div>\n\n {%- endfor -%}\n\n <hr>\n <br>\n <p class=\"strong\">\n {{ _(\"For\") }} {{ doc.company }},<br>\n <br>\n <br>\n <br>\n {{ _(\"Authorized Signatory\") }}\n </p>\n</div>\n\n\n",
"idx": 2,
"modified": "2014-08-29 13:20:15.789533",
"modified": "2014-10-17 17:20:02.740340",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Credit Note",

View File

@@ -3,9 +3,9 @@
"doc_type": "Journal Voucher",
"docstatus": 0,
"doctype": "Print Format",
"html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Payment Receipt Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Received On\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Received From\"), doc.pay_to_recd_from),\n (_(\"Amount\"), \"<strong>\" + doc.total_amount + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n <div class=\"row\">\n <div class=\"col-sm-3\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-sm-9\">{{ value }}</div>\n </div>\n\n {%- endfor -%}\n\n <hr>\n <br>\n <p class=\"strong\">\n {{ _(\"For\") }} {{ doc.company }},<br>\n <br>\n <br>\n <br>\n {{ _(\"Authorized Signatory\") }}\n </p>\n</div>\n\n",
"html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Payment Receipt Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Received On\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Received From\"), doc.pay_to_recd_from),\n (_(\"Amount\"), \"<strong>\" + doc.total_amount or 0 + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n <div class=\"row\">\n <div class=\"col-sm-3\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-sm-9\">{{ value }}</div>\n </div>\n\n {%- endfor -%}\n\n <hr>\n <br>\n <p class=\"strong\">\n {{ _(\"For\") }} {{ doc.company }},<br>\n <br>\n <br>\n <br>\n {{ _(\"Authorized Signatory\") }}\n </p>\n</div>\n\n",
"idx": 1,
"modified": "2014-08-29 15:55:34.248384",
"modified": "2014-11-04 11:25:57.560873",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Receipt Voucher",

View File

@@ -3,9 +3,9 @@
"doc_type": "Sales Invoice",
"docstatus": 0,
"doctype": "Print Format",
"html": "<style>\n\t.print-format table, .print-format tr, \n\t.print-format td, .print-format div, .print-format p {\n\t\tfont-family: Monospace;\n\t\tline-height: 200%;\n\t\tvertical-align: middle;\n\t}\n\t@media screen {\n\t\t.print-format {\n\t\t\twidth: 4in;\n\t\t\tpadding: 0.25in;\n\t\t\tmin-height: 8in;\n\t\t}\n\t}\n</style>\n\n<p class=\"text-center\">\n\t{{ doc.company }}<br>\n\t{{ doc.select_print_heading or _(\"Invoice\") }}<br>\n</p>\n<p>\n\t<b>{{ _(\"Receipt No\") }}:</b> {{ doc.name }}<br>\n\t<b>{{ _(\"Date\") }}:</b> {{ doc.get_formatted(\"posting_date\") }}<br>\n\t<b>{{ _(\"Customer\") }}:</b> {{ doc.customer_name }}\n</p>\n\n<hr>\n<table class=\"table table-condensed cart no-border\">\n\t<thead>\n\t\t<tr>\n\t\t\t<th width=\"60%\">{{ _(\"Item\") }}</b></th>\n\t\t\t<th width=\"10%\" class=\"text-right\">{{ _(\"Qty\") }}</th>\n\t\t\t<th width=\"30%\" class=\"text-right\">{{ _(\"Rate\") }}</th>\n\t\t</tr>\n\t</thead>\n\t<tbody>\n\t\t{%- for item in doc.entries -%}\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t<br>{{ item.item_name }}{%- endif -%}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">{{ item.qty }}</td>\n\t\t\t<td class=\"text-right\">{{ item.amount }}</td>\n\t\t</tr>\n\t\t{%- endfor -%}\n\t</tbody>\n</table>\n<table class=\"table table-condensed no-border\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ _(\"Net Total\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"net_total_export\") }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- for row in doc.other_charges -%}\n\t\t{%- if not row.included_in_print_rate -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ row.description }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- endif -%}\n\t\t{%- endfor -%}\n\t\t{%- if doc.discount_amount -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ _(\"Discount\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"discount_amount\") }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- endif -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t<b>{{ _(\"Grand Total\") }}</b>\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"grand_total_export\") }}\n\t\t\t</td>\n\t\t</tr>\n\t</tbody>\n</table>\n{% if doc.get(\"other_charges\", filters={\"included_in_print_rate\": 1}) %}\n<hr>\n<p><b>Taxes Included:</b></p>\n<table class=\"table table-condensed no-border\">\n\t<tbody>\n\t\t{%- for row in doc.other_charges -%}\n\t\t{%- if row.included_in_print_rate -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ row.description }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t</td>\n\t\t<tr>\n\t\t{%- endif -%}\n\t\t{%- endfor -%}\n\t</tbody>\n</table>\n{%- endif -%}\n<hr>\n<p>{{ doc.terms or \"\" }}</p>\n<p class=\"text-center\">{{ _(\"Thank you, please visit again.\") }}</p>",
"html": "<style>\n\t.print-format table, .print-format tr, \n\t.print-format td, .print-format div, .print-format p {\n\t\tfont-family: Monospace;\n\t\tline-height: 200%;\n\t\tvertical-align: middle;\n\t}\n\t@media screen {\n\t\t.print-format {\n\t\t\twidth: 4in;\n\t\t\tpadding: 0.25in;\n\t\t\tmin-height: 8in;\n\t\t}\n\t}\n</style>\n\n<p class=\"text-center\">\n\t{{ doc.company }}<br>\n\t{{ doc.select_print_heading or _(\"Invoice\") }}<br>\n</p>\n<p>\n\t<b>{{ _(\"Receipt No\") }}:</b> {{ doc.name }}<br>\n\t<b>{{ _(\"Date\") }}:</b> {{ doc.get_formatted(\"posting_date\") }}<br>\n\t<b>{{ _(\"Customer\") }}:</b> {{ doc.customer_name }}\n</p>\n\n<hr>\n<table class=\"table table-condensed cart no-border\">\n\t<thead>\n\t\t<tr>\n\t\t\t<th width=\"60%\">{{ _(\"Item\") }}</b></th>\n\t\t\t<th width=\"10%\" class=\"text-right\">{{ _(\"Qty\") }}</th>\n\t\t\t<th width=\"30%\" class=\"text-right\">{{ _(\"Rate\") }}</th>\n\t\t</tr>\n\t</thead>\n\t<tbody>\n\t\t{%- for item in doc.entries -%}\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t<br>{{ item.item_name }}{%- endif -%}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">{{ item.qty }}</td>\n\t\t\t<td class=\"text-right\">{{ item.amount }}</td>\n\t\t</tr>\n\t\t{%- endfor -%}\n\t</tbody>\n</table>\n<table class=\"table table-condensed no-border\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ _(\"Net Total\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"net_total_export\") }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- for row in doc.other_charges -%}\n\t\t{%- if not row.included_in_print_rate -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ row.description }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- endif -%}\n\t\t{%- endfor -%}\n\t\t{%- if doc.discount_amount -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ _(\"Discount\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"discount_amount\") }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- endif -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t<b>{{ _(\"Grand Total\") }}</b>\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"grand_total_export\") }}\n\t\t\t</td>\n\t\t</tr>\n\t</tbody>\n</table>\n{% if doc.get(\"other_charges\", filters={\"included_in_print_rate\": 1}) %}\n<hr>\n<p><b>Taxes Included:</b></p>\n<table class=\"table table-condensed no-border\">\n\t<tbody>\n\t\t{%- for row in doc.other_charges -%}\n\t\t{%- if row.included_in_print_rate -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ row.description }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ row.get_formatted(\"tax_amount_after_discount_amount\", doc) }}\n\t\t\t</td>\n\t\t<tr>\n\t\t{%- endif -%}\n\t\t{%- endfor -%}\n\t</tbody>\n</table>\n{%- endif -%}\n<hr>\n<p>{{ doc.terms or \"\" }}</p>\n<p class=\"text-center\">{{ _(\"Thank you, please visit again.\") }}</p>",
"idx": 1,
"modified": "2014-07-22 02:08:26.603223",
"modified": "2014-12-10 12:37:10.854370",
"modified_by": "Administrator",
"module": "Accounts",
"name": "POS Invoice",

View File

@@ -13,17 +13,17 @@ class AccountsReceivableReport(object):
self.age_as_on = getdate(nowdate()) \
if self.filters.report_date > getdate(nowdate()) \
else self.filters.report_date
def run(self):
customer_naming_by = frappe.db.get_value("Selling Settings", None, "cust_master_name")
return self.get_columns(customer_naming_by), self.get_data(customer_naming_by)
def get_columns(self, customer_naming_by):
columns = [
_("Posting Date") + ":Date:80", _("Account") + ":Link/Account:150",
_("Voucher Type") + "::110", _("Voucher No") + ":Dynamic Link/Voucher Type:120",
_("Due Date") + ":Date:80",
_("Invoiced Amount") + ":Currency:100", _("Payment Received") + ":Currency:100",
_("Due Date") + ":Date:80",
_("Invoiced Amount") + ":Currency:100", _("Payment Received") + ":Currency:100",
_("Outstanding Amount") + ":Currency:100", _("Age") + ":Int:50", "0-30:Currency:100",
"30-60:Currency:100", "60-90:Currency:100", _("90-Above") + ":Currency:100",
_("Customer") + ":Link/Customer:200"
@@ -69,27 +69,27 @@ class AccountsReceivableReport(object):
# returns a distinct list
return list(set([(e.voucher_type, e.voucher_no) for e in self.get_gl_entries()
if getdate(e.posting_date) > report_date]))
def get_entries_till(self, report_date):
# returns a generator
return (e for e in self.get_gl_entries()
return (e for e in self.get_gl_entries()
if getdate(e.posting_date) <= report_date)
def is_receivable(self, gle, future_vouchers):
return (
# advance
(not gle.against_voucher) or
(not gle.against_voucher) or
# against sales order
(gle.against_voucher_type == "Sales Order") or
# sales invoice
(gle.against_voucher==gle.voucher_no and gle.debit > 0) or
(gle.against_voucher==gle.voucher_no and gle.debit > 0) or
# entries adjusted with future vouchers
((gle.against_voucher_type, gle.against_voucher) in future_vouchers)
)
def get_outstanding_amount(self, gle, report_date):
payment_received = 0.0
for e in self.get_gl_entries_for(gle.account, gle.voucher_type, gle.voucher_no):
@@ -97,7 +97,7 @@ class AccountsReceivableReport(object):
payment_received += (flt(e.credit) - flt(e.debit))
return flt(gle.debit) - flt(gle.credit) - payment_received
def get_customer(self, account):
return self.get_account_map().get(account, {}).get("customer") or ""
@@ -106,25 +106,25 @@ class AccountsReceivableReport(object):
def get_territory(self, account):
return self.get_account_map().get(account, {}).get("territory") or ""
def get_account_map(self):
if not hasattr(self, "account_map"):
self.account_map = dict(((r.name, r) for r in frappe.db.sql("""select
self.account_map = dict(((r.name, r) for r in frappe.db.sql("""select
acc.name, cust.name as customer, cust.customer_name, cust.territory
from `tabAccount` acc left join `tabCustomer` cust
from `tabAccount` acc left join `tabCustomer` cust
on cust.name=acc.master_name where acc.master_type="Customer" """, as_dict=True)))
return self.account_map
def get_due_date(self, gle):
if not hasattr(self, "invoice_due_date_map"):
# TODO can be restricted to posting date
self.invoice_due_date_map = dict(frappe.db.sql("""select name, due_date
from `tabSales Invoice` where docstatus=1"""))
return gle.voucher_type == "Sales Invoice" \
and self.invoice_due_date_map.get(gle.voucher_no) or ""
def get_gl_entries(self):
if not hasattr(self, "gl_entries"):
conditions, values = self.prepare_conditions()
@@ -132,15 +132,15 @@ class AccountsReceivableReport(object):
where docstatus < 2 {0} order by posting_date, account""".format(conditions),
values, as_dict=True)
return self.gl_entries
def prepare_conditions(self):
conditions = [""]
values = {}
if self.filters.company:
conditions.append("company=%(company)s")
values["company"] = self.filters.company
if self.filters.account:
conditions.append("account=%(account)s")
values["account"] = self.filters.account
@@ -149,11 +149,11 @@ class AccountsReceivableReport(object):
if not account_map:
frappe.throw(_("No Customer Accounts found."))
else:
accounts_list = ['"{0}"'.format(ac) for ac in account_map]
accounts_list = ['"{0}"'.format(ac.replace('"', '\"')) for ac in account_map]
conditions.append("account in ({0})".format(", ".join(accounts_list)))
return " and ".join(conditions), values
def get_gl_entries_for(self, account, against_voucher_type, against_voucher):
if not hasattr(self, "gl_entries_map"):
self.gl_entries_map = {}
@@ -163,7 +163,7 @@ class AccountsReceivableReport(object):
.setdefault(gle.against_voucher_type, {})\
.setdefault(gle.against_voucher, [])\
.append(gle)
return self.gl_entries_map.get(account, {})\
.get(against_voucher_type, {})\
.get(against_voucher, [])
@@ -176,15 +176,15 @@ def get_ageing_data(age_as_on, entry_date, outstanding_amount):
outstanding_range = [0.0, 0.0, 0.0, 0.0]
if not (age_as_on and entry_date):
return [0] + outstanding_range
age = (getdate(age_as_on) - getdate(entry_date)).days or 0
index = None
for i, days in enumerate([30, 60, 90]):
if age <= days:
index = i
break
if index is None: index = 3
outstanding_range[index] = outstanding_amount
return [age] + outstanding_range

View File

@@ -71,7 +71,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
},
contact_person: function() {
this.supplier_address();
erpnext.utils.get_contact_details(this.frm);
},
buying_price_list: function() {
@@ -210,14 +210,15 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
calculate_totals: function() {
var tax_count = this.frm.tax_doclist.length;
this.frm.doc.grand_total = flt(tax_count ?
this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total,
precision("grand_total"));
this.frm.doc.grand_total_import = flt(this.frm.doc.grand_total /
this.frm.doc.conversion_rate, precision("grand_total_import"));
this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total);
this.frm.doc.grand_total_import = flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate);
this.frm.doc.total_tax = flt(this.frm.doc.grand_total - this.frm.doc.net_total,
precision("total_tax"));
this.frm.doc.grand_total = flt(this.frm.doc.grand_total, precision("grand_total"));
this.frm.doc.grand_total_import = flt(this.frm.doc.grand_total_import, precision("grand_total_import"));
// rounded totals
if(frappe.meta.get_docfield(this.frm.doc.doctype, "rounded_total", this.frm.doc.name)) {
this.frm.doc.rounded_total = Math.round(this.frm.doc.grand_total);

View File

@@ -3,15 +3,13 @@
from __future__ import unicode_literals
import frappe
from frappe.utils import cstr, flt
from frappe.utils import flt
from frappe import _
from erpnext.stock.doctype.item.item import get_last_purchase_details
from erpnext.controllers.buying_controller import BuyingController
class PurchaseCommon(BuyingController):
def update_last_purchase_rate(self, obj, is_submit):
"""updates last_purchase_rate in item table for each item"""
@@ -123,27 +121,6 @@ class PurchaseCommon(BuyingController):
else:
chk_dupl_itm.append(f)
def get_qty(self, curr_doctype, ref_tab_fname, ref_tab_dn, ref_doc_tname, transaction, curr_parent_name):
# Get total Quantities of current doctype (eg. PR) except for qty of this transaction
#------------------------------
# please check as UOM changes from Material Request - Purchase Order ,so doing following else uom should be same .
# i.e. in PO uom is NOS then in PR uom should be NOS
# but if in Material Request uom KG it can change in PO
get_qty = (transaction == 'Material Request - Purchase Order') and 'qty * conversion_factor' or 'qty'
qty = frappe.db.sql("""select sum(%s) from `tab%s` where %s = %s and
docstatus = 1 and parent != %s""" % (get_qty, curr_doctype, ref_tab_fname, '%s', '%s'),
(ref_tab_dn, curr_parent_name))
qty = qty and flt(qty[0][0]) or 0
# get total qty of ref doctype
#--------------------
max_qty = frappe.db.sql("""select qty from `tab%s` where name = %s
and docstatus = 1""" % (ref_doc_tname, '%s'), ref_tab_dn)
max_qty = max_qty and flt(max_qty[0][0]) or 0
return cstr(qty)+'~~~'+cstr(max_qty)
def check_for_stopped_status(self, doctype, docname):
stopped = frappe.db.sql("""select name from `tab%s` where name = %s and
status = 'Stopped'""" % (doctype, '%s'), docname)

View File

@@ -685,7 +685,8 @@
"label": "Recurring Type",
"no_copy": 1,
"options": "Monthly\nQuarterly\nHalf-yearly\nYearly",
"permlevel": 0
"permlevel": 0,
"print_hide": 1
},
{
"allow_on_submit": 1,
@@ -695,7 +696,8 @@
"fieldtype": "Date",
"label": "From Date",
"no_copy": 1,
"permlevel": 0
"permlevel": 0,
"print_hide": 1
},
{
"allow_on_submit": 1,
@@ -705,7 +707,8 @@
"fieldtype": "Date",
"label": "To Date",
"no_copy": 1,
"permlevel": 0
"permlevel": 0,
"print_hide": 1
},
{
"allow_on_submit": 1,
@@ -772,7 +775,7 @@
"icon": "icon-file-text",
"idx": 1,
"is_submittable": 1,
"modified": "2014-10-08 14:23:29.718779",
"modified": "2014-11-27 17:27:38.839440",
"modified_by": "Administrator",
"module": "Buying",
"name": "Purchase Order",

View File

@@ -96,50 +96,45 @@ class PurchaseOrder(BuyingController):
check_list.append(d.prevdoc_docname)
pc_obj.check_for_stopped_status( d.prevdoc_doctype, d.prevdoc_docname)
def update_requested_qty(self):
material_request_map = {}
for d in self.get("po_details"):
if d.prevdoc_doctype and d.prevdoc_doctype == "Material Request" and d.prevdoc_detail_docname:
material_request_map.setdefault(d.prevdoc_docname, []).append(d.prevdoc_detail_docname)
def update_bin(self, is_submit, is_stopped = 0):
from erpnext.stock.utils import update_bin
pc_obj = frappe.get_doc('Purchase Common')
for d in self.get('po_details'):
#1. Check if is_stock_item == 'Yes'
if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes":
# this happens when item is changed from non-stock to stock item
if not d.warehouse:
continue
for mr, mr_item_rows in material_request_map.items():
if mr and mr_item_rows:
mr_obj = frappe.get_doc("Material Request", mr)
ind_qty, po_qty = 0, flt(d.qty) * flt(d.conversion_factor)
if is_stopped:
po_qty = flt(d.qty) > flt(d.received_qty) and \
flt( flt(flt(d.qty) - flt(d.received_qty))*flt(d.conversion_factor)) or 0
if mr_obj.status in ["Stopped", "Cancelled"]:
frappe.throw(_("Material Request {0} is cancelled or stopped").format(mr), frappe.InvalidStatusError)
# No updates in Material Request on Stop / Unstop
if cstr(d.prevdoc_doctype) == 'Material Request' and not is_stopped:
# get qty and pending_qty of prevdoc
curr_ref_qty = pc_obj.get_qty(d.doctype, 'prevdoc_detail_docname',
d.prevdoc_detail_docname, 'Material Request Item',
'Material Request - Purchase Order', self.name)
max_qty, qty, curr_qty = flt(curr_ref_qty.split('~~~')[1]), \
flt(curr_ref_qty.split('~~~')[0]), 0
mr_obj.update_requested_qty(mr_item_rows)
if flt(qty) + flt(po_qty) > flt(max_qty):
curr_qty = flt(max_qty) - flt(qty)
# special case as there is no restriction
# for Material Request - Purchase Order
curr_qty = curr_qty > 0 and curr_qty or 0
else:
curr_qty = flt(po_qty)
def update_ordered_qty(self, po_item_rows=None):
"""update requested qty (before ordered_qty is updated)"""
from erpnext.stock.utils import get_bin
ind_qty = -flt(curr_qty)
def _update_ordered_qty(item_code, warehouse):
ordered_qty = frappe.db.sql("""
select sum((po_item.qty - ifnull(po_item.received_qty, 0))*po_item.conversion_factor)
from `tabPurchase Order Item` po_item, `tabPurchase Order` po
where po_item.item_code=%s and po_item.warehouse=%s
and po_item.qty > ifnull(po_item.received_qty, 0) and po_item.parent=po.name
and po.status!='Stopped' and po.docstatus=1""", (item_code, warehouse))
# Update ordered_qty and indented_qty in bin
args = {
"item_code": d.item_code,
"warehouse": d.warehouse,
"ordered_qty": (is_submit and 1 or -1) * flt(po_qty),
"indented_qty": (is_submit and 1 or -1) * flt(ind_qty),
"posting_date": self.transaction_date
}
update_bin(args)
bin_doc = get_bin(item_code, warehouse)
bin_doc.ordered_qty = flt(ordered_qty[0][0]) if ordered_qty else 0
bin_doc.save()
item_wh_list = []
for d in self.get("po_details"):
if (not po_item_rows or d.name in po_item_rows) and [d.item_code, d.warehouse] not in item_wh_list \
and frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes" and d.warehouse:
item_wh_list.append([d.item_code, d.warehouse])
for item_code, warehouse in item_wh_list:
_update_ordered_qty(item_code, warehouse)
def check_modified_date(self):
mod_db = frappe.db.sql("select modified from `tabPurchase Order` where name = %s",
@@ -152,13 +147,11 @@ class PurchaseOrder(BuyingController):
def update_status(self, status):
self.check_modified_date()
# step 1:=> Set Status
frappe.db.set(self,'status',cstr(status))
# step 2:=> Update Bin
self.update_bin(is_submit = (status == 'Submitted') and 1 or 0, is_stopped = 1)
self.update_requested_qty()
self.update_ordered_qty()
# step 3:=> Acknowledge user
msgprint(_("Status of {0} {1} is now {2}").format(self.doctype, self.name, status))
def on_submit(self):
@@ -167,7 +160,8 @@ class PurchaseOrder(BuyingController):
purchase_controller = frappe.get_doc("Purchase Common")
self.update_prevdoc_status()
self.update_bin(is_submit = 1, is_stopped = 0)
self.update_requested_qty()
self.update_ordered_qty()
frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype,
self.company, self.grand_total)
@@ -192,8 +186,13 @@ class PurchaseOrder(BuyingController):
throw(_("Purchase Invoice {0} is already submitted").format(", ".join(submitted)))
frappe.db.set(self,'status','Cancelled')
self.update_prevdoc_status()
self.update_bin( is_submit = 0, is_stopped = 0)
# Must be called after updating ordered qty in Material Request
self.update_requested_qty()
self.update_ordered_qty()
pc_obj.update_last_purchase_rate(self, is_submit = 0)
def on_update(self):
@@ -248,7 +247,7 @@ def make_purchase_invoice(source_name, target_doc=None):
def update_item(obj, target, source_parent):
target.amount = flt(obj.amount) - flt(obj.billed_amt)
target.base_amount = target.amount * flt(source_parent.conversion_rate)
target.qty = target.amount / flt(obj.rate) if flt(obj.rate) else flt(obj.qty)
target.qty = target.amount / flt(obj.rate) if (flt(obj.rate) and flt(obj.billed_amt)) else flt(obj.qty)
doc = get_mapped_doc("Purchase Order", source_name, {
"Purchase Order": {

View File

@@ -29,8 +29,7 @@ class TestPurchaseOrder(unittest.TestCase):
frappe.get_doc(pr).insert()
def test_ordered_qty(self):
frappe.db.sql("delete from tabBin")
existing_ordered_qty = self._get_ordered_qty("_Test Item", "_Test Warehouse - _TC")
from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt
po = frappe.copy_doc(test_records[0]).insert()
@@ -43,8 +42,7 @@ class TestPurchaseOrder(unittest.TestCase):
po.get("po_details")[0].item_code = "_Test Item"
po.submit()
self.assertEquals(frappe.db.get_value("Bin", {"item_code": "_Test Item",
"warehouse": "_Test Warehouse - _TC"}, "ordered_qty"), 10)
self.assertEquals(self._get_ordered_qty("_Test Item", "_Test Warehouse - _TC"), existing_ordered_qty + 10)
pr = make_purchase_receipt(po.name)
@@ -56,8 +54,9 @@ class TestPurchaseOrder(unittest.TestCase):
pr.insert()
pr.submit()
self.assertEquals(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item",
"warehouse": "_Test Warehouse - _TC"}, "ordered_qty")), 6.0)
po.load_from_db()
self.assertEquals(po.get("po_details")[0].received_qty, 4)
self.assertEquals(self._get_ordered_qty("_Test Item", "_Test Warehouse - _TC"), existing_ordered_qty + 6)
frappe.db.set_value('Item', '_Test Item', 'tolerance', 50)
@@ -68,8 +67,16 @@ class TestPurchaseOrder(unittest.TestCase):
pr1.insert()
pr1.submit()
self.assertEquals(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item",
"warehouse": "_Test Warehouse - _TC"}, "ordered_qty")), 0.0)
po.load_from_db()
self.assertEquals(po.get("po_details")[0].received_qty, 12)
self.assertEquals(self._get_ordered_qty("_Test Item", "_Test Warehouse - _TC"), existing_ordered_qty)
pr1.load_from_db()
pr1.cancel()
po.load_from_db()
self.assertEquals(po.get("po_details")[0].received_qty, 4)
self.assertEquals(self._get_ordered_qty("_Test Item", "_Test Warehouse - _TC"), existing_ordered_qty + 6)
def test_make_purchase_invoice(self):
from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_invoice
@@ -111,6 +118,9 @@ class TestPurchaseOrder(unittest.TestCase):
from erpnext.controllers.tests.test_recurring_document import test_recurring_document
test_recurring_document(self, test_records)
def _get_ordered_qty(self, item_code, warehouse):
return flt(frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, "ordered_qty"))
test_dependencies = ["BOM", "Item Price"]

View File

@@ -1,8 +1,6 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
{% include 'setup/doctype/contact_control/contact_control.js' %};
cur_frm.cscript.refresh = function(doc, dt, dn) {
cur_frm.cscript.make_dashboard(doc);
@@ -17,15 +15,13 @@ cur_frm.cscript.refresh = function(doc, dt, dn) {
}
else{
unhide_field(['address_html','contact_html']);
// make lists
cur_frm.cscript.make_address(doc,dt,dn);
cur_frm.cscript.make_contact(doc,dt,dn);
erpnext.utils.render_address_and_contact(cur_frm)
cur_frm.communication_view = new frappe.views.CommunicationList({
list: frappe.get_list("Communication", {"supplier": doc.name}),
parent: cur_frm.fields_dict.communication_html.wrapper,
doc: doc
})
});
}
}
@@ -61,45 +57,6 @@ cur_frm.cscript.make_dashboard = function(doc) {
})
}
cur_frm.cscript.make_address = function() {
if(!cur_frm.address_list) {
cur_frm.address_list = new frappe.ui.Listing({
parent: cur_frm.fields_dict['address_html'].wrapper,
page_length: 5,
new_doctype: "Address",
get_query: function() {
return "select name, address_type, address_line1, address_line2, city, state, country, pincode, fax, email_id, phone, is_primary_address, is_shipping_address from tabAddress where supplier='" +
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_address desc"
},
as_dict: 1,
no_results_message: __('No addresses created'),
render_row: cur_frm.cscript.render_address_row,
});
// note: render_address_row is defined in contact_control.js
}
cur_frm.address_list.run();
}
cur_frm.cscript.make_contact = function() {
if(!cur_frm.contact_list) {
cur_frm.contact_list = new frappe.ui.Listing({
parent: cur_frm.fields_dict['contact_html'].wrapper,
page_length: 5,
new_doctype: "Contact",
get_query: function() {
return "select name, first_name, last_name, email_id, phone, mobile_no, department, designation, is_primary_contact from tabContact where supplier='" +
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_contact desc"
},
as_dict: 1,
no_results_message: __('No contacts created'),
render_row: cur_frm.cscript.render_contact_row,
});
// note: render_contact_row is defined in contact_control.js
}
cur_frm.contact_list.run();
}
cur_frm.fields_dict['default_price_list'].get_query = function(doc, cdt, cdn) {
return{
filters:{'buying': 1}

View File

@@ -9,10 +9,14 @@ from frappe.utils import cint
from frappe import msgprint, _
from frappe.model.naming import make_autoname
from erpnext.accounts.party import create_party_account
from erpnext.utilities.address_and_contact import load_address_and_contact
from erpnext.utilities.transaction_base import TransactionBase
class Supplier(TransactionBase):
def onload(self):
"""Load address and contacts in `__onload`"""
load_address_and_contact(self, "supplier")
def autoname(self):
supp_master_name = frappe.defaults.get_global_default('supp_master_name')

View File

@@ -119,6 +119,10 @@ class AccountsController(TransactionBase):
item.get(fieldname) is None and value is not None:
item.set(fieldname, value)
if fieldname == "cost_center" and item.meta.get_field("cost_center") \
and not item.get("cost_center") and value is not None:
item.set(fieldname, value)
if ret.get("pricing_rule"):
for field in ["base_price_list_rate", "price_list_rate",
"discount_percentage", "base_rate", "rate"]:
@@ -437,7 +441,7 @@ class AccountsController(TransactionBase):
for order, jv_list in order_jv_map.items():
for jv in jv_list:
if not advance_jv_against_si or jv not in advance_jv_against_si:
frappe.throw(_("Journal Voucher {0} is linked against Order {1}, hence it must be fetched as advance in Invoice as well.")
frappe.msgprint(_("Journal Voucher {0} is linked against Order {1}, check if it should be pulled as advance in this invoice.")
.format(jv, order))

View File

@@ -110,13 +110,13 @@ class BuyingController(StockController):
self.round_floats_in(self, ["net_total", "net_total_import"])
def calculate_totals(self):
self.grand_total = flt(self.tax_doclist[-1].total if self.tax_doclist
else self.net_total, self.precision("grand_total"))
self.grand_total_import = flt(self.grand_total / self.conversion_rate,
self.precision("grand_total_import"))
self.grand_total = flt(self.tax_doclist[-1].total if self.tax_doclist else self.net_total)
self.grand_total_import = flt(self.grand_total / self.conversion_rate)
self.total_tax = flt(self.grand_total - self.net_total,
self.precision("total_tax"))
self.total_tax = flt(self.grand_total - self.net_total, self.precision("total_tax"))
self.grand_total = flt(self.grand_total, self.precision("grand_total"))
self.grand_total_import = flt(self.grand_total_import, self.precision("grand_total_import"))
if self.meta.get_field("rounded_total"):
self.rounded_total = rounded(self.grand_total)

View File

@@ -124,10 +124,7 @@ def send_notification(new_rv):
frappe.sendmail(new_rv.notification_email_address,
subject= _("New {0}: #{1}").format(new_rv.doctype, new_rv.name),
message = _("Please find attached {0} #{1}").format(new_rv.doctype, new_rv.name),
attachments = [{
"fname": new_rv.name + ".pdf",
"fcontent": frappe.get_print_format(new_rv.doctype, new_rv.name, as_pdf=True)
}])
attachments = [frappe.attach_print(new_rv.doctype, new_rv.name, file_name=new_rv.name)])
def notify_errors(doc, doctype, party, owner):
from frappe.utils.user import get_system_managers

View File

@@ -216,17 +216,17 @@ class SellingController(StockController):
self.round_floats_in(self, ["net_total", "net_total_export"])
def calculate_totals(self):
self.grand_total = flt(self.tax_doclist and \
self.tax_doclist[-1].total or self.net_total, self.precision("grand_total"))
self.grand_total_export = flt(self.grand_total / self.conversion_rate,
self.precision("grand_total_export"))
self.grand_total = flt(self.tax_doclist[-1].total if self.tax_doclist else self.net_total)
self.other_charges_total = flt(self.grand_total - self.net_total,
self.precision("other_charges_total"))
self.grand_total_export = flt(self.grand_total / self.conversion_rate)
self.other_charges_total_export = flt(self.grand_total_export -
self.net_total_export + flt(self.discount_amount),
self.precision("other_charges_total_export"))
self.other_charges_total = flt(self.grand_total - self.net_total, self.precision("other_charges_total"))
self.other_charges_total_export = flt(self.grand_total_export - self.net_total_export +
flt(self.discount_amount), self.precision("other_charges_total_export"))
self.grand_total = flt(self.grand_total, self.precision("grand_total"))
self.grand_total_export = flt(self.grand_total_export, self.precision("grand_total_export"))
self.rounded_total = rounded(self.grand_total)
self.rounded_total_export = rounded(self.grand_total_export)

View File

@@ -175,7 +175,7 @@ class StockController(AccountsController):
_(self.doctype), self.name, item.get("item_code")))
def get_sl_entries(self, d, args):
sl_dict = {
sl_dict = frappe._dict({
"item_code": d.get("item_code", None),
"warehouse": d.get("warehouse", None),
"posting_date": self.posting_date,
@@ -192,7 +192,7 @@ class StockController(AccountsController):
"serial_no": d.get("serial_no"),
"project": d.get("project_name"),
"is_cancelled": self.docstatus==2 and "Yes" or "No"
}
})
sl_dict.update(args)
return sl_dict

View File

@@ -4,7 +4,7 @@ app_publisher = "Web Notes Technologies Pvt. Ltd. and Contributors"
app_description = "Open Source Enterprise Resource Planning for Small and Midsized Organizations"
app_icon = "icon-th"
app_color = "#e74c3c"
app_version = "4.7.2"
app_version = "4.15.4"
error_report_email = "support@erpnext.com"
@@ -47,8 +47,8 @@ doc_events = {
"on_update": "erpnext.home.make_comment_feed"
},
"Stock Entry": {
"on_submit": "erpnext.stock.doctype.material_request.material_request.update_completed_qty",
"on_cancel": "erpnext.stock.doctype.material_request.material_request.update_completed_qty"
"on_submit": "erpnext.stock.doctype.material_request.material_request.update_completed_and_requested_qty",
"on_cancel": "erpnext.stock.doctype.material_request.material_request.update_completed_and_requested_qty"
},
"User": {
"validate": "erpnext.hr.doctype.employee.employee.validate_employee_role",

View File

@@ -1,9 +1,21 @@
{
"autoname": "EXP.######",
"autoname": "naming_series:",
"creation": "2013-01-10 16:34:14",
"docstatus": 0,
"doctype": "DocType",
"fields": [
{
"default": "EXP",
"fieldname": "naming_series",
"fieldtype": "Select",
"label": "Series",
"no_copy": 1,
"options": "EXP",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"reqd": 1
},
{
"default": "Draft",
"depends_on": "eval:!doc.__islocal",
@@ -190,7 +202,7 @@
"icon": "icon-money",
"idx": 1,
"is_submittable": 1,
"modified": "2014-08-27 07:08:48.454580",
"modified": "2014-11-24 18:25:53.038826",
"modified_by": "Administrator",
"module": "HR",
"name": "Expense Claim",

View File

@@ -104,9 +104,32 @@ cur_frm.cscript.calculate_total_days = function(doc, dt, dn) {
if(cint(doc.half_day) == 1) set_multiple(dt,dn,{total_leave_days:0.5});
else{
// server call is done to include holidays in leave days calculations
return get_server_fields('get_total_leave_days', '', '', doc, dt, dn, 1);
return frappe.call({
method: 'erpnext.hr.doctype.leave_application.leave_application.get_total_leave_days',
args: {leave_app: doc},
callback: function(response) {
if (response && response.message) {
cur_frm.set_value('total_leave_days', response.message.total_leave_days);
}
}
});
}
}
}
cur_frm.fields_dict.employee.get_query = erpnext.queries.employee;
frappe.ui.form.on("Leave Application", "leave_approver", function(frm) {
frappe.call({
"method": "frappe.client.get",
args: {
doctype: "User",
name: frm.doc.leave_approver
},
callback: function (data) {
frappe.model.set_value(frm.doctype, frm.docname, "leave_approver_name",
data.message.first_name
+ (data.message.last_name ? (" " + data.message.last_name) : ""))
}
})
})

View File

@@ -24,6 +24,13 @@
"options": "User",
"permlevel": 0
},
{
"fieldname": "leave_approver_name",
"fieldtype": "Read Only",
"label": "Leave Approver Name",
"permlevel": 0,
"precision": ""
},
{
"fieldname": "leave_type",
"fieldtype": "Link",
@@ -184,7 +191,7 @@
"idx": 1,
"is_submittable": 1,
"max_attachments": 3,
"modified": "2014-09-09 05:35:31.531651",
"modified": "2014-12-09 16:33:29.626849",
"modified_by": "Administrator",
"module": "HR",
"name": "Leave Application",

View File

@@ -2,7 +2,7 @@
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
import frappe, json
from frappe import _
from frappe.utils import cint, cstr, date_diff, flt, formatdate, getdate, get_url_to_form, \
@@ -77,26 +77,10 @@ class LeaveApplication(Document):
LeaveDayBlockedError)
def get_holidays(self):
tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2, `tabEmployee` e1
where e1.name = %s and h1.parent = h2.name and e1.holiday_list = h2.name
and h1.holiday_date between %s and %s""", (self.employee, self.from_date, self.to_date))
if not tot_hol:
tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2
where h1.parent = h2.name and h1.holiday_date between %s and %s
and ifnull(h2.is_default,0) = 1 and h2.fiscal_year = %s""",
(self.from_date, self.to_date, self.fiscal_year))
return tot_hol and flt(tot_hol[0][0]) or 0
return get_holidays(self)
def get_total_leave_days(self):
"""Calculates total leave days based on input and holidays"""
ret = {'total_leave_days' : 0.5}
if not self.half_day:
tot_days = date_diff(self.to_date, self.from_date) + 1
holidays = self.get_holidays()
ret = {
'total_leave_days' : flt(tot_days)-flt(holidays)
}
return ret
return get_total_leave_days(self)
def validate_to_date(self):
if self.from_date and self.to_date and \
@@ -216,6 +200,35 @@ class LeaveApplication(Document):
post(**{"txt": args.message, "contact": args.message_to, "subject": args.subject,
"notify": cint(self.follow_via_email)})
def get_holidays(leave_app):
tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2, `tabEmployee` e1
where e1.name = %s and h1.parent = h2.name and e1.holiday_list = h2.name
and h1.holiday_date between %s and %s""", (leave_app.employee, leave_app.from_date,
leave_app.to_date))[0][0]
# below line is needed. If an employee hasn't been assigned with any holiday list then above will return 0 rows.
if not tot_hol:
tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2
where h1.parent = h2.name and h1.holiday_date between %s and %s
and ifnull(h2.is_default,0) = 1 and h2.fiscal_year = %s""",
(leave_app.from_date, leave_app.to_date, leave_app.fiscal_year))[0][0]
return tot_hol
@frappe.whitelist()
def get_total_leave_days(leave_app):
# Parse Leave Application if neccessary
if isinstance(leave_app, str) or isinstance(leave_app, unicode):
leave_app = frappe.get_doc(json.loads(leave_app))
"""Calculates total leave days based on input and holidays"""
ret = {'total_leave_days' : 0.5}
if not leave_app.half_day:
tot_days = date_diff(leave_app.to_date, leave_app.from_date) + 1
holidays = leave_app.get_holidays()
ret = {
'total_leave_days' : flt(tot_days)-flt(holidays)
}
return ret
@frappe.whitelist()
def get_leave_balance(employee, leave_type, fiscal_year):
leave_all = frappe.db.sql("""select total_leaves_allocated

View File

@@ -156,7 +156,7 @@ class SalarySlip(TransactionBase):
/ cint(self.total_days_in_month), 2)
elif not self.payment_days:
d.e_modified_amount = 0
else:
elif not d.e_modified_amount:
d.e_modified_amount = d.e_amount
self.gross_pay += flt(d.e_modified_amount)
@@ -168,7 +168,7 @@ class SalarySlip(TransactionBase):
/ cint(self.total_days_in_month), 2)
elif not self.payment_days:
d.d_modified_amount = 0
else:
elif not d.d_modified_amount:
d.d_modified_amount = d.d_amount
self.total_deduction += flt(d.d_modified_amount)
@@ -191,9 +191,6 @@ class SalarySlip(TransactionBase):
if receiver:
subj = 'Salary Slip - ' + cstr(self.month) +'/'+cstr(self.fiscal_year)
sendmail([receiver], subject=subj, msg = _("Please see attachment"),
attachments=[{
"fname": self.name + ".pdf",
"fcontent": frappe.get_print_format(self.doctype, self.name, as_pdf = True)
}])
attachments=[frappe.attach_print(self.doctype, self.name, file_name=self.name)])
else:
msgprint(_("Company Email ID not found, hence mail not sent"))

View File

@@ -83,6 +83,7 @@ cur_frm.cscript.hour_rate = function(doc, dt, dn) {
cur_frm.cscript.time_in_mins = cur_frm.cscript.hour_rate;
cur_frm.cscript.fixed_cycle_cost = cur_frm.cscript.hour_rate;
cur_frm.cscript.item_code = function(doc, cdt, cdn) {
get_bom_material_detail(doc, cdt, cdn);

View File

@@ -57,6 +57,9 @@ class BOM(Document):
last_purchase_rate, is_manufactured_item
from `tabItem` where name=%s""", item_code, as_dict = 1)
if not item:
frappe.throw(_("Item: {0} does not exist in the system").format(item_code))
return item
def validate_rm_item(self, item):
@@ -285,7 +288,10 @@ class BOM(Document):
if not d.hour_rate:
d.hour_rate = flt(w[0])
fixed_cost += flt(w[1])
if d.fixed_cycle_cost == None:
d.fixed_cycle_cost= flt(w[1])
fixed_cost += d.fixed_cycle_cost
if d.hour_rate and d.time_in_mins:
d.operating_cost = flt(d.hour_rate) * flt(d.time_in_mins) / 60.0

View File

@@ -87,3 +87,6 @@ execute:frappe.delete_doc("DocType", "Purchase Request")
execute:frappe.delete_doc("DocType", "Purchase Request Item")
erpnext.patches.v4_2.recalculate_bom_cost
erpnext.patches.v4_2.fix_gl_entries_for_stock_transactions
erpnext.patches.v4_2.update_requested_and_ordered_qty
execute:frappe.delete_doc("DocType", "Contact Control")
erpnext.patches.v4_2.recalculate_bom_costs

View File

@@ -6,6 +6,7 @@ import frappe
def execute():
reference_date = guess_reference_date()
frappe.reload_doc('accounts', 'doctype', 'journal_voucher_detail')
for name in frappe.db.sql_list("""select name from `tabJournal Voucher`
where date(creation)>=%s""", reference_date):
jv = frappe.get_doc("Journal Voucher", name)

View File

@@ -0,0 +1,19 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
def execute():
frappe.reload_doc('manufacturing', 'doctype', 'bom_operation')
for d in frappe.db.sql("""select bom.name from `tabBOM` bom where bom.docstatus < 2 and
exists(select bom_op.name from `tabBOM Operation` bom_op where
bom.name = bom_op.parent and bom_op.fixed_cycle_cost IS NOT NULL)""", as_dict=1):
try:
bom = frappe.get_doc('BOM', d.name)
bom.ignore_validate_update_after_submit = True
bom.calculate_cost()
bom.save()
frappe.db.commit()
except:
frappe.db.rollback()

View File

@@ -0,0 +1,24 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
def execute():
from erpnext.utilities.repost_stock import update_bin_qty, get_indented_qty, get_ordered_qty
count=0
for item_code, warehouse in frappe.db.sql("""select distinct item_code, warehouse from
(select item_code, warehouse from tabBin
union
select item_code, warehouse from `tabStock Ledger Entry`) a"""):
try:
count += 1
update_bin_qty(item_code, warehouse, {
"indented_qty": get_indented_qty(item_code, warehouse),
"ordered_qty": get_ordered_qty(item_code, warehouse)
})
if count % 200 == 0:
frappe.db.commit()
except:
frappe.db.rollback()

View File

@@ -16,6 +16,15 @@ class TestTimeLog(unittest.TestCase):
self.assertRaises(OverlapError, ts.insert)
frappe.db.sql("delete from `tabTime Log`")
def test_negative_hours(self):
frappe.db.sql("delete from `tabTime Log`")
test_time_log = frappe.new_doc("Time Log")
test_time_log.activity_type = "Communication"
test_time_log.from_time = "2013-01-01 11:00:00.000000"
test_time_log.to_time = "2013-01-01 10:00:00.000000"
self.assertRaises(frappe.ValidationError, test_time_log.save)
frappe.db.sql("delete from `tabTime Log`")
test_records = frappe.get_test_records('Time Log')
test_ignore = ["Time Log Batch", "Sales Invoice"]

View File

@@ -1,5 +1,5 @@
{
"allow_import": 1,
"allow_import": 1,
"autoname": "naming_series:",
"creation": "2013-04-03 16:38:41",
"description": "Log of Activities performed by users against Tasks that can be used for tracking time, billing.",
@@ -25,14 +25,6 @@
"read_only": 0,
"reqd": 1
},
{
"fieldname": "hours",
"fieldtype": "Float",
"in_list_view": 1,
"label": "Hours",
"permlevel": 0,
"read_only": 0
},
{
"fieldname": "to_time",
"fieldtype": "Datetime",
@@ -42,6 +34,14 @@
"read_only": 0,
"reqd": 1
},
{
"fieldname": "hours",
"fieldtype": "Float",
"in_list_view": 1,
"label": "Hours",
"permlevel": 0,
"read_only": 0
},
{
"fieldname": "column_break_3",
"fieldtype": "Column Break",
@@ -151,7 +151,7 @@
"icon": "icon-time",
"idx": 1,
"is_submittable": 1,
"modified": "2014-08-04 05:23:15.740050",
"modified": "2014-10-22 16:53:26.993828",
"modified_by": "Administrator",
"module": "Projects",
"name": "Time Log",

View File

@@ -19,10 +19,12 @@ class TimeLog(Document):
self.set_status()
self.validate_overlap()
self.calculate_total_hours()
def calculate_total_hours(self):
from frappe.utils import time_diff_in_hours
self.hours = time_diff_in_hours(self.to_time, self.from_time)
if self.hours < 0:
frappe.throw(_("'From Time' cannot be later than 'To Time'"))
def set_status(self):
self.status = {

View File

@@ -10,6 +10,8 @@
"public/js/feature_setup.js",
"public/js/utils.js",
"public/js/queries.js",
"public/js/utils/party.js"
"public/js/utils/party.js",
"public/js/templates/address_list.html",
"public/js/templates/contact_list.html"
]
}

View File

@@ -108,6 +108,7 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({
// otherwise, only reset values
$.each(this.data, function(i, d) {
me.reset_item_values(d);
d["closing_qty_value"] = 0;
});
}
@@ -131,6 +132,7 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({
if(me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) {
var item = me.item_by_name[sl.item_code];
if(item.closing_qty_value==undefined) item.closing_qty_value = 0;
if(me.value_or_qty!="Quantity") {
var wh = me.get_item_warehouse(sl.warehouse, sl.item_code);

View File

@@ -0,0 +1,20 @@
<p><button class="btn btn-sm btn-default btn-address">
<i class="icon-plus"></i> New Address</button></p>
{% for(var i=0, l=addr_list.length; i<l; i++) { %}
<hr>
<a href="#Form/Address/{%= addr_list[i].name %}" class="btn btn-sm btn-default pull-right">
{%= __("Edit") %}</a>
<p><b>{%= i+1 %}. {%= addr_list[i].address_type %}</b></p>
<div style="padding-left: 15px;">
<div>
{% if(addr_list[i].is_primary_address) { %}<span class="label label-info">
{%= __("Primary") %}</span>{% } %}
{% if(addr_list[i].is_shipping_address) { %}<span class="label label-default">
{%= __("Shipping") %}</span>{% } %}
</div>
<p style="margin-top: 5px;">{%= addr_list[i].display %}</p>
</div>
{% } %}
{% if(!addr_list.length) { %}
<p class="text-muted">{%= __("No address added yet.") %}</p>
{% } %}

View File

@@ -0,0 +1,28 @@
<p><button class="btn btn-sm btn-default btn-contact">
<i class="icon-plus"></i> New Contact</button></p>
{% for(var i=0, l=contact_list.length; i<l; i++) { %}
<hr>
<a href="#Form/Contact/{%= contact_list[i].name %}" class="btn btn-sm btn-default pull-right">
{%= __("Edit") %}</a>
<p><b>{%= i+1 %}. {%= contact_list[i].first_name %} {%= contact_list[i].last_name %}</b></p>
<div style="padding-left: 15px;">
<div>
{% if(contact_list[i].is_primary_contact) { %}<span class="label label-info">
{%= __("Primary") %}</span>{% } %}
</div>
<p style="padding-top: 5px;">
{% if(contact_list[i].phone) { %}
{%= __("Phone") %}: {%= contact_list[i].phone %}<br>
{% } %}
{% if(contact_list[i].mobile_no) { %}
{%= __("Mobile No.") %}: {%= contact_list[i].mobile_no %}<br>
{% } %}
{% if(contact_list[i].email_id) { %}
{%= __("Email ID") %}: {%= contact_list[i].email_id %}
{% } %}
</p>
</div>
{% } %}
{% if(!contact_list.length) { %}
<p class="text-muted">{%= __("No contacts added yet.") %}</p>
{% } %}

View File

@@ -402,20 +402,32 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
},
_set_values_for_item_list: function(children) {
var me = this;
var price_list_rate_changed = false;
$.each(children, function(i, d) {
var existing_pricing_rule = frappe.model.get_value(d.doctype, d.name, "pricing_rule");
$.each(d, function(k, v) {
if (["doctype", "name"].indexOf(k)===-1) {
if(k=="price_list_rate") {
if(flt(v) != flt(d.price_list_rate)) price_list_rate_changed = true;
}
frappe.model.set_value(d.doctype, d.name, k, v);
}
});
// if pricing rule set as blank from an existing value, apply price_list
if(!me.frm.doc.ignore_pricing_rule && existing_pricing_rule && !d.pricing_rule) {
me.apply_price_list(frappe.get_doc(d.doctype, d.name));
}
if(!price_list_rate_changed) me.calculate_taxes_and_totals();
});
},
apply_price_list: function() {
apply_price_list: function(item) {
var me = this;
return this.frm.call({
method: "erpnext.stock.get_item_details.apply_price_list",
args: { args: this._get_args() },
args: { args: this._get_args(item) },
callback: function(r) {
if (!r.exc) {
me.in_apply_price_list = true;

View File

@@ -81,5 +81,28 @@ $.extend(erpnext, {
d.show();
});
}
},
});
erpnext.utils = {
render_address_and_contact: function(frm) {
// render address
$(frm.fields_dict['address_html'].wrapper)
.html(frappe.render(frappe.templates.address_list,
cur_frm.doc.__onload))
.find(".btn-address").on("click", function() {
new_doc("Address");
});
// render contact
if(frm.fields_dict['contact_html']) {
$(frm.fields_dict['contact_html'].wrapper)
.html(frappe.render(frappe.templates.contact_list,
cur_frm.doc.__onload))
.find(".btn-contact").on("click", function() {
new_doc("Contact");
}
);
}
}
}

View File

@@ -1,8 +1,6 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
{% include 'setup/doctype/contact_control/contact_control.js' %};
cur_frm.cscript.onload = function(doc, dt, dn) {
cur_frm.cscript.load_defaults(doc, dt, dn);
}
@@ -32,8 +30,8 @@ cur_frm.cscript.refresh = function(doc, dt, dn) {
}else{
unhide_field(['address_html','contact_html']);
// make lists
cur_frm.cscript.make_address(doc, dt, dn);
cur_frm.cscript.make_contact(doc, dt, dn);
erpnext.utils.render_address_and_contact(cur_frm)
cur_frm.communication_view = new frappe.views.CommunicationList({
parent: cur_frm.fields_dict.communication_html.wrapper,
@@ -79,44 +77,6 @@ cur_frm.cscript.setup_dashboard = function(doc) {
});
}
cur_frm.cscript.make_address = function() {
if(!cur_frm.address_list) {
cur_frm.address_list = new frappe.ui.Listing({
parent: cur_frm.fields_dict['address_html'].wrapper,
page_length: 5,
new_doctype: "Address",
get_query: function() {
return "select name, address_type, address_line1, address_line2, city, state, country, pincode, fax, email_id, phone, is_primary_address, is_shipping_address from tabAddress where customer='" +
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_address desc"
},
as_dict: 1,
no_results_message: __('No addresses created'),
render_row: cur_frm.cscript.render_address_row,
});
// note: render_address_row is defined in contact_control.js
}
cur_frm.address_list.run();
}
cur_frm.cscript.make_contact = function() {
if(!cur_frm.contact_list) {
cur_frm.contact_list = new frappe.ui.Listing({
parent: cur_frm.fields_dict['contact_html'].wrapper,
page_length: 5,
new_doctype: "Contact",
get_query: function() {
return "select name, first_name, last_name, email_id, phone, mobile_no, department, designation, is_primary_contact from tabContact where customer='" +
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_contact desc"
},
as_dict: 1,
no_results_message: __('No contacts created'),
render_row: cur_frm.cscript.render_contact_row,
});
// note: render_contact_row is defined in contact_control.js
}
cur_frm.contact_list.run();
}
cur_frm.fields_dict['customer_group'].get_query = function(doc, dt, dn) {
return{
filters:{'is_group': 'No'}

View File

@@ -7,11 +7,14 @@ from frappe.model.naming import make_autoname
from frappe import msgprint, _
import frappe.defaults
from erpnext.utilities.transaction_base import TransactionBase
from erpnext.utilities.address_and_contact import load_address_and_contact
from erpnext.accounts.party import create_party_account
class Customer(TransactionBase):
def onload(self):
"""Load address and contacts in `__onload`"""
load_address_and_contact(self, "customer")
def autoname(self):
cust_master_name = frappe.defaults.get_global_default('cust_master_name')

View File

@@ -1,8 +1,6 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
{% include 'setup/doctype/contact_control/contact_control.js' %};
frappe.provide("erpnext");
erpnext.LeadController = frappe.ui.form.Controller.extend({
setup: function() {
@@ -42,33 +40,10 @@ erpnext.LeadController = frappe.ui.form.Controller.extend({
});
if(!this.frm.doc.__islocal) {
this.make_address_list();
erpnext.utils.render_address_and_contact(cur_frm);
}
},
make_address_list: function() {
var me = this;
if(!this.frm.address_list) {
this.frm.address_list = new frappe.ui.Listing({
parent: this.frm.fields_dict['address_html'].wrapper,
page_length: 5,
new_doctype: "Address",
get_query: function() {
return 'select name, address_type, address_line1, address_line2, \
city, state, country, pincode, fax, email_id, phone, \
is_primary_address, is_shipping_address from tabAddress \
where lead="'+me.frm.doc.name+'" and docstatus != 2 \
order by is_primary_address, is_shipping_address desc'
},
as_dict: 1,
no_results_message: __('No addresses created'),
render_row: this.render_address_row,
});
// note: render_address_row is defined in contact_control.js
}
this.frm.address_list.run();
},
create_customer: function() {
frappe.model.open_mapped_doc({
method: "erpnext.selling.doctype.lead.lead.make_customer",

View File

@@ -160,7 +160,7 @@
"allow_on_submit": 0,
"description": "Add to calendar on this date",
"fieldname": "contact_date",
"fieldtype": "Date",
"fieldtype": "Datetime",
"in_filter": 1,
"label": "Next Contact Date",
"no_copy": 1,
@@ -368,7 +368,7 @@
],
"icon": "icon-user",
"idx": 1,
"modified": "2014-08-12 05:22:18.801092",
"modified": "2014-12-01 08:22:23.286314",
"modified_by": "Administrator",
"module": "Selling",
"name": "Lead",

View File

@@ -9,11 +9,13 @@ from frappe import session
from frappe.model.mapper import get_mapped_doc
from erpnext.controllers.selling_controller import SellingController
from erpnext.utilities.address_and_contact import load_address_and_contact
class Lead(SellingController):
def onload(self):
customer = frappe.db.get_value("Customer", {"lead_name": self.name})
self.get("__onload").is_customer = customer
load_address_and_contact(self, "lead")
def validate(self):
self._prev = frappe._dict({
@@ -43,6 +45,7 @@ class Lead(SellingController):
def add_calendar_event(self, opts=None, force=False):
super(Lead, self).add_calendar_event({
"owner": self.lead_owner,
"starts_on": self.contact_date,
"subject": ('Contact ' + cstr(self.lead_name)),
"description": ('Contact ' + cstr(self.lead_name)) + \
(self.contact_by and ('. By : ' + cstr(self.contact_by)) or '')

View File

@@ -35,8 +35,6 @@ erpnext.selling.Opportunity = frappe.ui.form.Controller.extend({
});
}
if(this.frm.doc.customer && !this.frm.doc.customer_name) cur_frm.cscript.customer(this.frm.doc);
this.setup_queries();
},

View File

@@ -47,6 +47,7 @@
"in_filter": 1,
"in_list_view": 1,
"label": "Customer",
"no_copy": 1,
"oldfieldname": "customer",
"oldfieldtype": "Link",
"options": "Customer",
@@ -372,7 +373,7 @@
{
"description": "Your sales person will get a reminder on this date to contact the customer",
"fieldname": "contact_date",
"fieldtype": "Date",
"fieldtype": "Datetime",
"label": "Next Contact Date",
"oldfieldname": "contact_date",
"oldfieldtype": "Date",
@@ -416,7 +417,7 @@
"icon": "icon-info-sign",
"idx": 1,
"is_submittable": 1,
"modified": "2014-08-12 05:21:51.282397",
"modified": "2014-12-19 10:49:20.695720",
"modified_by": "Administrator",
"module": "Selling",
"name": "Opportunity",

View File

@@ -57,6 +57,7 @@ class Opportunity(TransactionBase):
opts = frappe._dict()
opts.description = ""
opts.contact_date = self.contact_date
if self.customer:
if self.contact_person:

View File

@@ -23,7 +23,7 @@ class Quotation(SellingController):
self.validate_order_type()
self.validate_for_items()
self.validate_uom_is_integer("stock_uom", "qty")
self.quotation_to = "Customer" if self.customer else "Lead"
self.validate_quotation_to()
def has_sales_order(self):
return frappe.db.get_value("Sales Order Item", {"prevdoc_docname": self.name, "docstatus": 1})
@@ -54,6 +54,13 @@ class Quotation(SellingController):
if is_sales_item == 'No':
frappe.throw(_("Item {0} must be Sales Item").format(d.item_code))
def validate_quotation_to(self):
if self.customer:
self.quotation_to = "Customer"
self.lead = None
elif self.lead:
self.quotation_to = "Lead"
def update_opportunity(self):
for opportunity in list(set([d.prevdoc_docname for d in self.get("quotation_details")])):
if opportunity:
@@ -139,8 +146,8 @@ def _make_sales_order(source_name, target_doc=None, ignore_permissions=False):
return doclist
def _make_customer(source_name, ignore_permissions=False):
quotation = frappe.db.get_value("Quotation", source_name, ["lead", "order_type"])
if quotation and quotation[0]:
quotation = frappe.db.get_value("Quotation", source_name, ["lead", "order_type", "customer"])
if quotation and quotation[0] and not quotation[2]:
lead_name = quotation[0]
customer_name = frappe.db.get_value("Customer", {"lead_name": lead_name},
["name", "customer_name"], as_dict=True)

View File

@@ -175,6 +175,7 @@
"fieldtype": "Data",
"hidden": 0,
"label": "PO No",
"no_copy": 0,
"oldfieldname": "po_no",
"oldfieldtype": "Data",
"permlevel": 0,
@@ -1020,7 +1021,7 @@
"idx": 1,
"is_submittable": 1,
"issingle": 0,
"modified": "2014-10-08 14:22:44.717108",
"modified": "2014-12-16 10:36:47.295144",
"modified_by": "Administrator",
"module": "Selling",
"name": "Sales Order",

View File

@@ -157,7 +157,7 @@ class SalesOrder(SellingController):
self.check_credit(self.grand_total)
frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype, self.grand_total, self)
frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype, self.company, self.grand_total, self)
self.update_prevdoc_status('submit')
frappe.db.set(self, 'status', 'Submitted')
@@ -275,6 +275,14 @@ def make_material_request(source_name, target_doc=None):
@frappe.whitelist()
def make_delivery_note(source_name, target_doc=None):
def set_missing_values(source, target):
if source.po_no:
if target.po_no:
target_po_no = target.po_no.split(", ")
target_po_no.append(source.po_no)
target.po_no = ", ".join(list(set(target_po_no))) if len(target_po_no) > 1 else target_po_no[0]
else:
target.po_no = source.po_no
target.ignore_pricing_rule = 1
target.run_method("set_missing_values")
target.run_method("calculate_taxes_and_totals")
@@ -329,7 +337,7 @@ def make_sales_invoice(source_name, target_doc=None):
def update_item(source, target, source_parent):
target.amount = flt(source.amount) - flt(source.billed_amt)
target.base_amount = target.amount * flt(source_parent.conversion_rate)
target.qty = source.rate and target.amount / flt(source.rate) or source.qty
target.qty = target.amount / flt(source.rate) if (source.rate and source.billed_amt) else source.qty
doclist = get_mapped_doc("Sales Order", source_name, {
"Sales Order": {
@@ -357,17 +365,6 @@ def make_sales_invoice(source_name, target_doc=None):
}
}, target_doc, postprocess)
def set_advance_vouchers(source, target):
advance_voucher_list = []
advance_voucher = frappe.db.sql("""
select
t1.name as voucher_no, t1.posting_date, t1.remark, t2.account,
t2.name as voucher_detail_no, {amount_query} as payment_amount, t2.is_advance
from
`tabJournal Voucher` t1, `tabJournal Voucher Detail` t2
""")
return doclist
@frappe.whitelist()

View File

@@ -341,11 +341,8 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
var me = this;
var tax_count = this.frm.tax_doclist.length;
this.frm.doc.grand_total = flt(
tax_count ? this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total,
precision("grand_total"));
this.frm.doc.grand_total_export = flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate,
precision("grand_total_export"));
this.frm.doc.grand_total = flt(tax_count ? this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total);
this.frm.doc.grand_total_export = flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate);
this.frm.doc.other_charges_total = flt(this.frm.doc.grand_total - this.frm.doc.net_total,
precision("other_charges_total"));
@@ -353,6 +350,9 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
this.frm.doc.net_total_export + flt(this.frm.doc.discount_amount),
precision("other_charges_total_export"));
this.frm.doc.grand_total = flt(this.frm.doc.grand_total, precision("grand_total"));
this.frm.doc.grand_total_export = flt(this.frm.doc.grand_total_export, precision("grand_total_export"));
this.frm.doc.rounded_total = Math.round(this.frm.doc.grand_total);
this.frm.doc.rounded_total_export = Math.round(this.frm.doc.grand_total_export);
},
@@ -587,16 +587,18 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
});
frappe.ui.form.on(cur_frm.doctype,"project_name", function(frm) {
frappe.call({
method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
args: { project_name: frm.doc.project_name },
callback: function(r, rt) {
if(!r.exc) {
$.each(frm.doc[cur_frm.cscript.fname] || [], function(i, row) {
frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
msgprint(__("Cost Center For Item with Item Code '"+row.item_name+"' has been Changed to "+ r.message));
})
if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
frappe.call({
method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
args: { project_name: frm.doc.project_name },
callback: function(r, rt) {
if(!r.exc) {
$.each(frm.doc[cur_frm.cscript.fname] || [], function(i, row) {
frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
msgprint(__("Cost Center For Item with Item Code '"+row.item_name+"' has been Changed to "+ r.message));
})
}
}
}
})
})
}
})

View File

@@ -98,9 +98,12 @@ class AuthorizationControl(TransactionBase):
if doc_obj:
price_list_rate, base_rate = 0, 0
for d in doc_obj.get(doc_obj.fname):
if d.base_price_list_rate and d.base_rate:
price_list_rate += flt(d.base_price_list_rate)
if d.base_rate:
price_list_rate += flt(d.base_price_list_rate) or flt(d.base_rate)
base_rate += flt(d.base_rate)
if doc_obj.get("discount_amount"):
base_rate -= flt(doc_obj.discount_amount)
if price_list_rate: av_dis = 100 - flt(base_rate * 100 / price_list_rate)
final_based_on = ['Grand Total','Average Discount','Customerwise Discount','Itemwise Discount']

View File

@@ -1 +0,0 @@
[To deprecate] Common scripts for Contacts.

View File

@@ -1 +0,0 @@
from __future__ import unicode_literals

View File

@@ -1,161 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
if(cur_frm.fields_dict['territory']) {
cur_frm.fields_dict['territory'].get_query = function(doc, dt, dn) {
return {
filters: {
'is_group': "No"
}
}
}
}
cur_frm.cscript.render_contact_row = function(wrapper, data) {
// prepare data
data.fullname = (data.first_name || '')
+ (data.last_name ? ' ' + data.last_name : '');
data.primary = data.is_primary_contact ? ' [Primary]' : '';
// prepare description
var description = [];
$.each([
['phone', 'Tel'],
['mobile_no', 'Mobile'],
['email_id', 'Email'],
['department', 'Department'],
['designation', 'Designation']],
function(i, v) {
if(v[0] && data[v[0]]) {
description.push(repl('<h6>%(label)s:</h6> %(value)s', {
label: v[1],
value: data[v[0]],
}));
}
});
data.description = description.join('<br />');
cur_frm.cscript.render_row_in_wrapper(wrapper, data, 'Contact');
}
cur_frm.cscript.render_address_row = function(wrapper, data) {
// prepare data
data.fullname = data.address_type;
data.primary = '';
if (data.is_primary_address) data.primary += ' [Preferred for Billing]';
if (data.is_shipping_address) data.primary += ' [Preferred for Shipping]';
// prepare address
var address = [];
$.each(['address_line1', 'address_line2', 'city', 'state', 'country', 'pincode'],
function(i, v) {
if(data[v]) address.push(data[v]);
});
data.address = address.join('<br />');
data.address = "<p class='address-list'>" + data.address + "</p>";
// prepare description
var description = [];
$.each([
['address', 'Address'],
['phone', 'Tel'],
['fax', 'Fax'],
['email_id', 'Email']],
function(i, v) {
if(data[v[0]]) {
description.push(repl('<h6>%(label)s:</h6> %(value)s', {
label: v[1],
value: data[v[0]],
}));
}
});
data.description = description.join('<br />');
cur_frm.cscript.render_row_in_wrapper(wrapper, data, 'Address');
$(wrapper).find('p.address-list').css({
'padding-left': '10px',
'margin-bottom': '-10px'
});
}
cur_frm.cscript.render_row_in_wrapper = function(wrapper, data, doctype) {
// render
var $wrapper = $(wrapper);
data.doctype = doctype.toLowerCase();
$wrapper.append(repl("\
<h4><a class='link_type'>%(fullname)s</a>%(primary)s</h4>\
<div class='description'>\
<p>%(description)s</p>\
<p><a class='delete link_type'>delete this %(doctype)s</a></p>\
</div>", data));
// make link
$wrapper.find('h4 a.link_type').click(function() {
loaddoc(doctype, data.name);
});
// css
$wrapper.css({ 'margin': '0px' });
$wrapper.find('div.description').css({
'padding': '5px 2px',
'line-height': '150%',
});
$wrapper.find('h6').css({ 'display': 'inline-block' });
// show delete
var $delete_doc = $wrapper.find('a.delete');
if (frappe.model.can_delete(doctype))
$delete_doc.toggle(true);
else
$delete_doc.toggle(false);
$delete_doc.css({ 'padding-left': '0px' });
$delete_doc.click(function() {
cur_frm.cscript.delete_doc(doctype, data.name);
return false;
});
}
cur_frm.cscript.delete_doc = function(doctype, name) {
// confirm deletion
var go_ahead = confirm(__("Delete {0} {1}?", [doctype, name]));
if (!go_ahead) return;
frappe.model.delete_doc(doctype, name, function(r) {
if (!r.exc) {
var list_name = doctype.toLowerCase() + '_list';
cur_frm[list_name].run();
}
});
}
// Render List
cur_frm.cscript.render_list = function(doc, doctype, wrapper, ListView, make_new_doc) {
frappe.model.with_doctype(doctype, function(r) {
if((r && r['403']) || frappe.boot.user.all_read.indexOf(doctype)===-1) {
return;
}
var RecordListView = frappe.views.RecordListView.extend({
default_docstatus: ['0', '1', '2'],
default_filters: [
[doctype, doc.doctype.toLowerCase().replace(" ", "_"), '=', doc.name],
],
});
if (make_new_doc) {
RecordListView = RecordListView.extend({
make_new_doc: make_new_doc,
});
}
var record_list_view = new RecordListView(doctype, wrapper, ListView);
if (!cur_frm[doctype.toLowerCase().replace(" ", "_") + "_list"]) {
cur_frm[doctype.toLowerCase().replace(" ", "_") + "_list"] = record_list_view;
}
});
}

View File

@@ -1,48 +0,0 @@
{
"creation": "2012-03-27 14:36:19.000000",
"docstatus": 0,
"doctype": "DocType",
"fields": [
{
"fieldname": "header",
"fieldtype": "Text",
"in_list_view": 1,
"label": "Header",
"permlevel": 0
},
{
"fieldname": "customer_intro",
"fieldtype": "Text",
"in_list_view": 1,
"label": "Customer Intro",
"permlevel": 0
},
{
"fieldname": "supplier_intro",
"fieldtype": "Text",
"in_list_view": 1,
"label": "Supplier Intro",
"permlevel": 0
}
],
"idx": 1,
"in_create": 1,
"issingle": 1,
"modified": "2013-12-20 19:23:02.000000",
"modified_by": "Administrator",
"module": "Setup",
"name": "Contact Control",
"owner": "Administrator",
"permissions": [
{
"create": 0,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"role": "System Manager",
"write": 1
}
],
"read_only": 1
}

View File

@@ -1,10 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
class ContactControl(Document):
pass

View File

@@ -1,12 +1,6 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
{% include 'setup/doctype/contact_control/contact_control.js' %};
cur_frm.cscript.onload = function(doc,dt,dn){
}
cur_frm.cscript.refresh = function(doc,dt,dn){
if(doc.__islocal){
@@ -15,8 +9,8 @@ cur_frm.cscript.refresh = function(doc,dt,dn){
else{
unhide_field(['address_html', 'contact_html']);
// make lists
cur_frm.cscript.make_address(doc,dt,dn);
cur_frm.cscript.make_contact(doc,dt,dn);
erpnext.utils.render_address_and_contact(cur_frm)
if (doc.show_in_website) {
cur_frm.set_intro(__("Published on website at: {0}",
@@ -25,57 +19,6 @@ cur_frm.cscript.refresh = function(doc,dt,dn){
}
}
cur_frm.cscript.make_address = function() {
if(!cur_frm.address_list) {
cur_frm.address_list = new frappe.ui.Listing({
parent: cur_frm.fields_dict['address_html'].wrapper,
page_length: 2,
new_doctype: "Address",
custom_new_doc: function(doctype) {
var address = frappe.model.make_new_doc_and_get_name('Address');
address = locals['Address'][address];
address.sales_partner = cur_frm.doc.name;
address.address_title = cur_frm.doc.name;
address.address_type = "Office";
frappe.set_route("Form", "Address", address.name);
},
get_query: function() {
return "select name, address_type, address_line1, address_line2, city, state, country, pincode, fax, email_id, phone, is_primary_address, is_shipping_address from tabAddress where sales_partner='" +
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_address desc"
},
as_dict: 1,
no_results_message: __('No addresses created'),
render_row: cur_frm.cscript.render_address_row,
});
}
cur_frm.address_list.run();
}
cur_frm.cscript.make_contact = function() {
if(!cur_frm.contact_list) {
cur_frm.contact_list = new frappe.ui.Listing({
parent: cur_frm.fields_dict['contact_html'].wrapper,
page_length: 2,
new_doctype: "Contact",
custom_new_doc: function(doctype) {
var contact = frappe.model.make_new_doc_and_get_name('Contact');
contact = locals['Contact'][contact];
contact.sales_partner = cur_frm.doc.name;
frappe.set_route("Form", "Contact", contact.name);
},
get_query: function() {
return "select name, first_name, last_name, email_id, phone, mobile_no, department, designation, is_primary_contact from tabContact where sales_partner='" +
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_contact desc"
},
as_dict: 1,
no_results_message: __('No contacts created'),
render_row: cur_frm.cscript.render_contact_row,
});
}
cur_frm.contact_list.run();
}
cur_frm.fields_dict['partner_target_details'].grid.get_field("item_group").get_query = function(doc, dt, dn) {
return{
filters:{ 'is_group': "No" }

View File

@@ -5,11 +5,16 @@ from __future__ import unicode_literals
import frappe
from frappe.utils import cstr, filter_strip_join
from frappe.website.website_generator import WebsiteGenerator
from erpnext.utilities.address_and_contact import load_address_and_contact
class SalesPartner(WebsiteGenerator):
page_title_field = "partner_name"
condition_field = "show_in_website"
template = "templates/generators/sales_partner.html"
def onload(self):
"""Load address and contacts in `__onload`"""
load_address_and_contact(self, "sales_partner")
def autoname(self):
self.name = self.partner_name

View File

@@ -59,15 +59,31 @@ frappe.pages['setup-wizard'].onload = function(wrapper) {
title: __("Select Your Language"),
icon: "icon-globe",
fields: [
{"fieldname": "language", "label": __("Language"), "fieldtype": "Select",
options: ["english", "العربية", "deutsch", "ελληνικά", "español", "français", "हिंदी", "hrvatski",
"italiano", "nederlands", "polski", "português brasileiro", "português", "српски", "தமிழ்",
"ไทย", "中国(简体)", "中國(繁體)"], reqd:1},
{
"fieldname": "language", "label": __("Language"), "fieldtype": "Select",
reqd:1
},
],
help: __("Welcome to ERPNext. Please select your language to begin the Setup Wizard."),
onload: function(slide) {
var me = this;
if (!this.language_list) {
frappe.call({
method: "erpnext.setup.page.setup_wizard.setup_wizard.load_languages",
callback: function(r) {
me.language_list = r.message;
slide.get_input("language")
.add_options(r.message)
.val("english");
}
})
} else {
slide.get_input("language").add_options(this.language_list);
}
slide.get_input("language").on("change", function() {
var lang = $(this).val();
var lang = $(this).val() || "english";
frappe._messages = {};
frappe.call({
method: "erpnext.setup.page.setup_wizard.setup_wizard.load_messages",

View File

@@ -434,4 +434,6 @@ def load_messages(language):
send_translations(m)
return lang
@frappe.whitelist()
def load_languages():
return sorted(get_lang_dict().keys())

View File

@@ -178,7 +178,7 @@
{
"fieldname": "po_no",
"fieldtype": "Data",
"hidden": 1,
"hidden": 0,
"label": "Customer's Purchase Order No",
"no_copy": 0,
"oldfieldname": "po_no",
@@ -1013,7 +1013,7 @@
"idx": 1,
"in_create": 0,
"is_submittable": 1,
"modified": "2014-09-09 05:35:30.700911",
"modified": "2014-12-22 14:58:19.575566",
"modified_by": "Administrator",
"module": "Stock",
"name": "Delivery Note",

View File

@@ -52,11 +52,15 @@ class DeliveryNote(SellingController):
else:
df.delete_key("__print_hide")
toggle_print_hide(self.meta, "currency")
item_meta = frappe.get_meta("Delivery Note Item")
for fieldname in ("rate", "amount", "price_list_rate", "discount_percentage"):
toggle_print_hide(item_meta, fieldname)
print_hide_fields = {
"parent": ["grand_total_export", "rounded_total_export", "in_words_export", "currency", "net_total_export"],
"items": ["rate", "amount", "price_list_rate", "discount_percentage"]
}
for key, fieldname in print_hide_fields.items():
for f in fieldname:
toggle_print_hide(self.meta if key == "parent" else item_meta, f)
def get_portal_page(self):
return "shipment" if self.docstatus==1 else None
@@ -245,7 +249,7 @@ class DeliveryNote(SellingController):
sl_entries = []
for d in self.get_item_list():
if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes" \
and d.warehouse:
and d.warehouse and flt(d['qty']):
self.update_reserved_qty(d)
sl_entries.append(self.get_sl_entries(d, {
@@ -377,7 +381,8 @@ def make_packing_slip(source_name, target_doc=None):
"Delivery Note": {
"doctype": "Packing Slip",
"field_map": {
"name": "delivery_note"
"name": "delivery_note",
"letter_head": "letter_head"
},
"validation": {
"docstatus": ["=", 0]

View File

@@ -79,30 +79,9 @@ class MaterialRequest(BuyingController):
# NOTE: Since Item BOM and FG quantities are combined, using current data, it cannot be validated
# Though the creation of Material Request from a Production Plan can be rethought to fix this
def update_bin(self, is_submit, is_stopped):
""" Update Quantity Requested for Purchase in Bin for Material Request of type 'Purchase'"""
from erpnext.stock.utils import update_bin
for d in self.get('indent_details'):
if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes":
if not d.warehouse:
frappe.throw(_("Warehouse required for stock Item {0}").format(d.item_code))
qty =flt(d.qty)
if is_stopped:
qty = (d.qty > d.ordered_qty) and flt(flt(d.qty) - flt(d.ordered_qty)) or 0
args = {
"item_code": d.item_code,
"warehouse": d.warehouse,
"indented_qty": (is_submit and 1 or -1) * flt(qty),
"posting_date": self.transaction_date
}
update_bin(args)
def on_submit(self):
frappe.db.set(self, 'status', 'Submitted')
self.update_bin(is_submit = 1, is_stopped = 0)
self.update_requested_qty()
def check_modified_date(self):
mod_db = frappe.db.sql("""select modified from `tabMaterial Request` where name = %s""",
@@ -115,23 +94,18 @@ class MaterialRequest(BuyingController):
def update_status(self, status):
self.check_modified_date()
self.update_bin(is_submit = (status == 'Submitted') and 1 or 0, is_stopped = 1)
self.update_requested_qty()
frappe.db.set(self, 'status', cstr(status))
frappe.msgprint(_("Status updated to {0}").format(_(status)))
def on_cancel(self):
# Step 1:=> Get Purchase Common Obj
pc_obj = frappe.get_doc('Purchase Common')
# Step 2:=> Check for stopped status
pc_obj.check_for_stopped_status(self.doctype, self.name)
# Step 3:=> Check if Purchase Order has been submitted against current Material Request
pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Order', docname = self.name, detail_doctype = 'Purchase Order Item')
# Step 4:=> Update Bin
self.update_bin(is_submit = 0, is_stopped = (cstr(self.status) == 'Stopped') and 1 or 0)
# Step 5:=> Set Status
self.update_requested_qty()
frappe.db.set(self,'status','Cancelled')
def update_completed_qty(self, mr_items=None):
@@ -162,56 +136,47 @@ class MaterialRequest(BuyingController):
self.per_ordered = flt((per_ordered / flt(len(item_doclist))) * 100.0, 2)
frappe.db.set_value(self.doctype, self.name, "per_ordered", self.per_ordered)
def update_completed_qty(doc, method):
if doc.doctype == "Stock Entry":
def update_requested_qty(self, mr_item_rows=None):
"""update requested qty (before ordered_qty is updated)"""
from erpnext.stock.utils import get_bin
def _update_requested_qty(item_code, warehouse):
requested_qty = frappe.db.sql("""select sum(mr_item.qty - ifnull(mr_item.ordered_qty, 0))
from `tabMaterial Request Item` mr_item, `tabMaterial Request` mr
where mr_item.item_code=%s and mr_item.warehouse=%s
and mr_item.qty > ifnull(mr_item.ordered_qty, 0) and mr_item.parent=mr.name
and mr.status!='Stopped' and mr.docstatus=1""", (item_code, warehouse))
bin_doc = get_bin(item_code, warehouse)
bin_doc.indented_qty = flt(requested_qty[0][0]) if requested_qty else 0
bin_doc.save()
item_wh_list = []
for d in self.get("indent_details"):
if (not mr_item_rows or d.name in mr_item_rows) and [d.item_code, d.warehouse] not in item_wh_list \
and frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes" and d.warehouse:
item_wh_list.append([d.item_code, d.warehouse])
for item_code, warehouse in item_wh_list:
_update_requested_qty(item_code, warehouse)
def update_completed_and_requested_qty(stock_entry, method):
if stock_entry.doctype == "Stock Entry":
material_request_map = {}
for d in doc.get("mtn_details"):
for d in stock_entry.get("mtn_details"):
if d.material_request:
material_request_map.setdefault(d.material_request, []).append(d.material_request_item)
for mr_name, mr_items in material_request_map.items():
mr_obj = frappe.get_doc("Material Request", mr_name)
for mr, mr_item_rows in material_request_map.items():
if mr and mr_item_rows:
mr_obj = frappe.get_doc("Material Request", mr)
if mr_obj.status in ["Stopped", "Cancelled"]:
frappe.throw(_("Material Request {0} is cancelled or stopped").format(mr_obj.name),
frappe.InvalidStatusError)
if mr_obj.status in ["Stopped", "Cancelled"]:
frappe.throw(_("Material Request {0} is cancelled or stopped").format(mr), frappe.InvalidStatusError)
_update_requested_qty(doc, mr_obj, mr_items)
# update ordered percentage and qty
mr_obj.update_completed_qty(mr_items)
def _update_requested_qty(doc, mr_obj, mr_items):
"""update requested qty (before ordered_qty is updated)"""
from erpnext.stock.utils import update_bin
for mr_item_name in mr_items:
mr_item = mr_obj.get("indent_details", {"name": mr_item_name})
se_detail = doc.get("mtn_details", {"material_request": mr_obj.name,
"material_request_item": mr_item_name})
if mr_item and se_detail:
mr_item = mr_item[0]
se_detail = se_detail[0]
mr_item.ordered_qty = flt(mr_item.ordered_qty)
mr_item.qty = flt(mr_item.qty)
se_detail.transfer_qty = flt(se_detail.transfer_qty)
if se_detail.docstatus == 2 and mr_item.ordered_qty > mr_item.qty \
and se_detail.transfer_qty == mr_item.ordered_qty:
add_indented_qty = mr_item.qty
elif se_detail.docstatus == 1 and \
mr_item.ordered_qty + se_detail.transfer_qty > mr_item.qty:
add_indented_qty = mr_item.qty - mr_item.ordered_qty
else:
add_indented_qty = se_detail.transfer_qty
update_bin({
"item_code": se_detail.item_code,
"warehouse": se_detail.t_warehouse,
"indented_qty": (se_detail.docstatus==2 and 1 or -1) * add_indented_qty,
"posting_date": doc.posting_date,
})
mr_obj.update_completed_qty(mr_item_rows)
mr_obj.update_requested_qty(mr_item_rows)
def set_missing_values(source, target_doc):
target_doc.run_method("set_missing_values")
@@ -240,7 +205,8 @@ def make_purchase_order(source_name, target_doc=None):
["uom", "stock_uom"],
["uom", "uom"]
],
"postprocess": update_item
"postprocess": update_item,
"condition": lambda doc: doc.ordered_qty < doc.qty
}
}, target_doc, set_missing_values)
@@ -278,7 +244,8 @@ def make_purchase_order_based_on_supplier(source_name, target_doc=None):
["uom", "stock_uom"],
["uom", "uom"]
],
"postprocess": update_item
"postprocess": update_item,
"condition": lambda doc: doc.ordered_qty < doc.qty
}
}, target_doc, postprocess)
@@ -350,7 +317,8 @@ def make_stock_entry(source_name, target_doc=None):
"uom": "stock_uom",
"warehouse": "t_warehouse"
},
"postprocess": update_item
"postprocess": update_item,
"condition": lambda doc: doc.ordered_qty < doc.qty
}
}, target_doc, set_missing_values)

View File

@@ -58,12 +58,6 @@ class TestMaterialRequest(unittest.TestCase):
self.assertEquals(se.doctype, "Stock Entry")
self.assertEquals(len(se.get("mtn_details")), len(mr.get("indent_details")))
def _test_requested_qty(self, qty1, qty2):
self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty1)
self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 200",
"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty2)
def _insert_stock_entry(self, qty1, qty2):
se = frappe.get_doc({
"company": "_Test Company",
@@ -103,7 +97,8 @@ class TestMaterialRequest(unittest.TestCase):
se.submit()
def test_completed_qty_for_purchase(self):
frappe.db.sql("""delete from `tabBin`""")
existing_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
existing_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
# submit material request of type Purchase
mr = frappe.copy_doc(test_records[0])
@@ -115,8 +110,6 @@ class TestMaterialRequest(unittest.TestCase):
self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0)
self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0)
self._test_requested_qty(54.0, 3.0)
# map a purchase order
from erpnext.stock.doctype.material_request.material_request import make_purchase_order
po_doc = make_purchase_order(mr.name)
@@ -149,7 +142,12 @@ class TestMaterialRequest(unittest.TestCase):
self.assertEquals(mr.per_ordered, 50)
self.assertEquals(mr.get("indent_details")[0].ordered_qty, 27.0)
self.assertEquals(mr.get("indent_details")[1].ordered_qty, 1.5)
self._test_requested_qty(27.0, 1.5)
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
self.assertEquals(current_requested_qty_item1, existing_requested_qty_item1 + 27.0)
self.assertEquals(current_requested_qty_item2, existing_requested_qty_item2 + 1.5)
po.cancel()
# check if per complete is as expected
@@ -158,11 +156,15 @@ class TestMaterialRequest(unittest.TestCase):
self.assertEquals(mr.get("indent_details")[0].ordered_qty, None)
self.assertEquals(mr.get("indent_details")[1].ordered_qty, None)
self._test_requested_qty(54.0, 3.0)
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
self.assertEquals(current_requested_qty_item1, existing_requested_qty_item1 + 54.0)
self.assertEquals(current_requested_qty_item2, existing_requested_qty_item2 + 3.0)
def test_completed_qty_for_transfer(self):
frappe.db.sql("""delete from `tabBin`""")
frappe.db.sql("""delete from `tabStock Ledger Entry`""")
existing_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
existing_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
# submit material request of type Purchase
mr = frappe.copy_doc(test_records[0])
@@ -175,7 +177,11 @@ class TestMaterialRequest(unittest.TestCase):
self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0)
self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0)
self._test_requested_qty(54.0, 3.0)
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
self.assertEquals(current_requested_qty_item1, existing_requested_qty_item1 + 54.0)
self.assertEquals(current_requested_qty_item2, existing_requested_qty_item2 + 3.0)
from erpnext.stock.doctype.material_request.material_request import make_stock_entry
@@ -226,7 +232,11 @@ class TestMaterialRequest(unittest.TestCase):
self.assertEquals(mr.get("indent_details")[0].ordered_qty, 27.0)
self.assertEquals(mr.get("indent_details")[1].ordered_qty, 1.5)
self._test_requested_qty(27.0, 1.5)
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
self.assertEquals(current_requested_qty_item1, existing_requested_qty_item1 + 27.0)
self.assertEquals(current_requested_qty_item2, existing_requested_qty_item2 + 1.5)
# check if per complete is as expected for Stock Entry cancelled
se.cancel()
@@ -235,11 +245,15 @@ class TestMaterialRequest(unittest.TestCase):
self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0)
self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0)
self._test_requested_qty(54.0, 3.0)
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
self.assertEquals(current_requested_qty_item1, existing_requested_qty_item1 + 54.0)
self.assertEquals(current_requested_qty_item2, existing_requested_qty_item2 + 3.0)
def test_completed_qty_for_over_transfer(self):
frappe.db.sql("""delete from `tabBin`""")
frappe.db.sql("""delete from `tabStock Ledger Entry`""")
existing_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
existing_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
# submit material request of type Purchase
mr = frappe.copy_doc(test_records[0])
@@ -252,8 +266,6 @@ class TestMaterialRequest(unittest.TestCase):
self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0)
self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0)
self._test_requested_qty(54.0, 3.0)
# map a stock entry
from erpnext.stock.doctype.material_request.material_request import make_stock_entry
@@ -297,7 +309,12 @@ class TestMaterialRequest(unittest.TestCase):
self.assertEquals(mr.per_ordered, 100)
self.assertEquals(mr.get("indent_details")[0].ordered_qty, 60.0)
self.assertEquals(mr.get("indent_details")[1].ordered_qty, 3.0)
self._test_requested_qty(0.0, 0.0)
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
self.assertEquals(current_requested_qty_item1, existing_requested_qty_item1)
self.assertEquals(current_requested_qty_item2, existing_requested_qty_item2)
# check if per complete is as expected for Stock Entry cancelled
se.cancel()
@@ -306,7 +323,11 @@ class TestMaterialRequest(unittest.TestCase):
self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0)
self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0)
self._test_requested_qty(54.0, 3.0)
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
self.assertEquals(current_requested_qty_item1, existing_requested_qty_item1 + 54.0)
self.assertEquals(current_requested_qty_item2, existing_requested_qty_item2 + 3.0)
def test_incorrect_mapping_of_stock_entry(self):
# submit material request of type Purchase
@@ -348,5 +369,9 @@ class TestMaterialRequest(unittest.TestCase):
mr.company = "_Test Company 1"
self.assertRaises(InvalidWarehouseCompany, mr.insert)
def _get_requested_qty(self, item_code, warehouse):
return flt(frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, "indented_qty"))
test_dependencies = ["Currency Exchange"]
test_records = frappe.get_test_records('Material Request')

View File

@@ -27,7 +27,7 @@ def get_bin_qty(item, warehouse):
where item_code = %s and warehouse = %s""", (item, warehouse), as_dict = 1)
return det and det[0] or ''
def update_packing_list_item(obj, packing_item_code, qty, warehouse, line, packing_list_idx):
def update_packing_list_item(obj, packing_item_code, qty, warehouse, line):
bin = get_bin_qty(packing_item_code, warehouse)
item = get_packing_item_details(packing_item_code)
@@ -54,9 +54,7 @@ def update_packing_list_item(obj, packing_item_code, qty, warehouse, line, packi
pi.warehouse = warehouse
if not pi.batch_no:
pi.batch_no = cstr(line.get("batch_no"))
pi.idx = packing_list_idx
packing_list_idx += 1
def make_packing_list(obj, item_table_fieldname):
@@ -64,13 +62,11 @@ def make_packing_list(obj, item_table_fieldname):
if obj.get("_action") and obj._action == "update_after_submit": return
packing_list_idx = 0
parent_items = []
for d in obj.get(item_table_fieldname):
if frappe.db.get_value("Sales BOM", {"new_item_code": d.item_code}):
for i in get_sales_bom_items(d.item_code):
update_packing_list_item(obj, i['item_code'], flt(i['qty'])*flt(d.qty),
d.warehouse, d, packing_list_idx)
update_packing_list_item(obj, i['item_code'], flt(i['qty'])*flt(d.qty), d.warehouse, d)
if [d.item_code, d.name] not in parent_items:
parent_items.append([d.item_code, d.name])

View File

@@ -1,264 +1,281 @@
{
"autoname": "PS.#######",
"creation": "2013-04-11 15:32:24",
"description": "Generate packing slips for packages to be delivered. Used to notify package number, package contents and its weight.",
"docstatus": 0,
"doctype": "DocType",
"document_type": "Transaction",
"autoname": "PS.#######",
"creation": "2013-04-11 15:32:24",
"description": "Generate packing slips for packages to be delivered. Used to notify package number, package contents and its weight.",
"docstatus": 0,
"doctype": "DocType",
"document_type": "Transaction",
"fields": [
{
"fieldname": "packing_slip_details",
"fieldtype": "Section Break",
"label": "Packing Slip Items",
"permlevel": 0,
"fieldname": "packing_slip_details",
"fieldtype": "Section Break",
"label": "Packing Slip Items",
"permlevel": 0,
"read_only": 0
},
},
{
"fieldname": "column_break0",
"fieldtype": "Column Break",
"permlevel": 0,
"fieldname": "column_break0",
"fieldtype": "Column Break",
"permlevel": 0,
"read_only": 0
},
},
{
"description": "Indicates that the package is a part of this delivery (Only Draft)",
"fieldname": "delivery_note",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Delivery Note",
"options": "Delivery Note",
"permlevel": 0,
"read_only": 0,
"description": "Indicates that the package is a part of this delivery (Only Draft)",
"fieldname": "delivery_note",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Delivery Note",
"options": "Delivery Note",
"permlevel": 0,
"read_only": 0,
"reqd": 1
},
},
{
"fieldname": "column_break1",
"fieldtype": "Column Break",
"permlevel": 0,
"fieldname": "column_break1",
"fieldtype": "Column Break",
"permlevel": 0,
"read_only": 0
},
},
{
"fieldname": "naming_series",
"fieldtype": "Select",
"label": "Series",
"no_copy": 0,
"options": "PS-",
"permlevel": 0,
"print_hide": 1,
"read_only": 0,
"fieldname": "naming_series",
"fieldtype": "Select",
"label": "Series",
"no_copy": 0,
"options": "PS-",
"permlevel": 0,
"print_hide": 1,
"read_only": 0,
"reqd": 1
},
},
{
"fieldname": "section_break0",
"fieldtype": "Section Break",
"permlevel": 0,
"fieldname": "section_break0",
"fieldtype": "Section Break",
"permlevel": 0,
"read_only": 0
},
},
{
"fieldname": "column_break2",
"fieldtype": "Column Break",
"permlevel": 0,
"fieldname": "column_break2",
"fieldtype": "Column Break",
"permlevel": 0,
"read_only": 0
},
},
{
"description": "Identification of the package for the delivery (for print)",
"fieldname": "from_case_no",
"fieldtype": "Data",
"in_list_view": 1,
"label": "From Package No.",
"no_copy": 1,
"permlevel": 0,
"read_only": 0,
"reqd": 1,
"description": "Identification of the package for the delivery (for print)",
"fieldname": "from_case_no",
"fieldtype": "Data",
"in_list_view": 1,
"label": "From Package No.",
"no_copy": 1,
"permlevel": 0,
"read_only": 0,
"reqd": 1,
"width": "50px"
},
},
{
"fieldname": "column_break3",
"fieldtype": "Column Break",
"permlevel": 0,
"fieldname": "column_break3",
"fieldtype": "Column Break",
"permlevel": 0,
"read_only": 0
},
},
{
"description": "If more than one package of the same type (for print)",
"fieldname": "to_case_no",
"fieldtype": "Data",
"in_list_view": 1,
"label": "To Package No.",
"no_copy": 1,
"permlevel": 0,
"read_only": 0,
"description": "If more than one package of the same type (for print)",
"fieldname": "to_case_no",
"fieldtype": "Data",
"in_list_view": 1,
"label": "To Package No.",
"no_copy": 1,
"permlevel": 0,
"read_only": 0,
"width": "50px"
},
},
{
"fieldname": "package_item_details",
"fieldtype": "Section Break",
"label": "Package Item Details",
"permlevel": 0,
"fieldname": "package_item_details",
"fieldtype": "Section Break",
"label": "Package Item Details",
"permlevel": 0,
"read_only": 0
},
},
{
"fieldname": "get_items",
"fieldtype": "Button",
"label": "Get Items",
"fieldname": "get_items",
"fieldtype": "Button",
"label": "Get Items",
"permlevel": 0
},
},
{
"fieldname": "item_details",
"fieldtype": "Table",
"label": "Items",
"options": "Packing Slip Item",
"permlevel": 0,
"fieldname": "item_details",
"fieldtype": "Table",
"label": "Items",
"options": "Packing Slip Item",
"permlevel": 0,
"read_only": 0
},
},
{
"fieldname": "package_weight_details",
"fieldtype": "Section Break",
"label": "Package Weight Details",
"permlevel": 0,
"fieldname": "package_weight_details",
"fieldtype": "Section Break",
"label": "Package Weight Details",
"permlevel": 0,
"read_only": 0
},
},
{
"description": "The net weight of this package. (calculated automatically as sum of net weight of items)",
"fieldname": "net_weight_pkg",
"fieldtype": "Float",
"label": "Net Weight",
"no_copy": 1,
"permlevel": 0,
"description": "The net weight of this package. (calculated automatically as sum of net weight of items)",
"fieldname": "net_weight_pkg",
"fieldtype": "Float",
"label": "Net Weight",
"no_copy": 1,
"permlevel": 0,
"read_only": 1
},
},
{
"fieldname": "net_weight_uom",
"fieldtype": "Link",
"label": "Net Weight UOM",
"no_copy": 1,
"options": "UOM",
"permlevel": 0,
"fieldname": "net_weight_uom",
"fieldtype": "Link",
"label": "Net Weight UOM",
"no_copy": 1,
"options": "UOM",
"permlevel": 0,
"read_only": 1
},
},
{
"fieldname": "column_break4",
"fieldtype": "Column Break",
"permlevel": 0,
"fieldname": "column_break4",
"fieldtype": "Column Break",
"permlevel": 0,
"read_only": 0
},
},
{
"description": "The gross weight of the package. Usually net weight + packaging material weight. (for print)",
"fieldname": "gross_weight_pkg",
"fieldtype": "Float",
"label": "Gross Weight",
"no_copy": 1,
"permlevel": 0,
"description": "The gross weight of the package. Usually net weight + packaging material weight. (for print)",
"fieldname": "gross_weight_pkg",
"fieldtype": "Float",
"label": "Gross Weight",
"no_copy": 1,
"permlevel": 0,
"read_only": 0
},
},
{
"fieldname": "gross_weight_uom",
"fieldtype": "Link",
"label": "Gross Weight UOM",
"no_copy": 1,
"options": "UOM",
"permlevel": 0,
"fieldname": "gross_weight_uom",
"fieldtype": "Link",
"label": "Gross Weight UOM",
"no_copy": 1,
"options": "UOM",
"permlevel": 0,
"read_only": 0
},
},
{
"fieldname": "misc_details",
"fieldtype": "Section Break",
"label": "Misc Details",
"permlevel": 0,
"fieldname": "letter_head_details",
"fieldtype": "Section Break",
"label": "Letter Head",
"permlevel": 0,
"precision": ""
},
{
"allow_on_submit": 1,
"fieldname": "letter_head",
"fieldtype": "Link",
"label": "Letter Head",
"options": "Letter Head",
"permlevel": 0,
"precision": "",
"print_hide": 1
},
{
"fieldname": "misc_details",
"fieldtype": "Section Break",
"label": "Misc Details",
"permlevel": 0,
"read_only": 0
},
},
{
"fieldname": "amended_from",
"fieldtype": "Link",
"ignore_user_permissions": 1,
"label": "Amended From",
"no_copy": 1,
"options": "Packing Slip",
"permlevel": 0,
"print_hide": 1,
"fieldname": "amended_from",
"fieldtype": "Link",
"ignore_user_permissions": 1,
"label": "Amended From",
"no_copy": 1,
"options": "Packing Slip",
"permlevel": 0,
"print_hide": 1,
"read_only": 1
}
],
"icon": "icon-suitcase",
"idx": 1,
"is_submittable": 1,
"modified": "2014-05-27 03:49:14.251039",
"modified_by": "Administrator",
"module": "Stock",
"name": "Packing Slip",
"owner": "Administrator",
],
"icon": "icon-suitcase",
"idx": 1,
"is_submittable": 1,
"modified": "2014-11-13 16:50:50.423299",
"modified_by": "Administrator",
"module": "Stock",
"name": "Packing Slip",
"owner": "Administrator",
"permissions": [
{
"amend": 1,
"apply_user_permissions": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Material User",
"submit": 1,
"amend": 1,
"apply_user_permissions": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Material User",
"submit": 1,
"write": 1
},
},
{
"amend": 1,
"apply_user_permissions": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Sales User",
"submit": 1,
"amend": 1,
"apply_user_permissions": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Sales User",
"submit": 1,
"write": 1
},
},
{
"amend": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Material Master Manager",
"submit": 1,
"amend": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Material Master Manager",
"submit": 1,
"write": 1
},
},
{
"amend": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Material Manager",
"submit": 1,
"amend": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Material Manager",
"submit": 1,
"write": 1
},
},
{
"amend": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Sales Manager",
"submit": 1,
"amend": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Sales Manager",
"submit": 1,
"write": 1
}
],
"read_only_onload": 1,
],
"read_only_onload": 1,
"search_fields": "delivery_note"
}
}

View File

@@ -8,7 +8,6 @@ from frappe.utils import cstr, flt, cint
from frappe import _
import frappe.defaults
from erpnext.stock.utils import update_bin
from erpnext.controllers.buying_controller import BuyingController
@@ -157,29 +156,19 @@ class PurchaseReceipt(BuyingController):
self.make_sl_entries(sl_entries)
def update_ordered_qty(self):
stock_items = self.get_stock_items()
po_map = {}
for d in self.get("purchase_receipt_details"):
if d.item_code in stock_items and d.warehouse \
and cstr(d.prevdoc_doctype) == 'Purchase Order':
if d.prevdoc_doctype and d.prevdoc_doctype == "Purchase Order" and d.prevdoc_detail_docname:
po_map.setdefault(d.prevdoc_docname, []).append(d.prevdoc_detail_docname)
already_received_qty = self.get_already_received_qty(d.prevdoc_docname,
d.prevdoc_detail_docname)
po_qty, ordered_warehouse = self.get_po_qty_and_warehouse(d.prevdoc_detail_docname)
for po, po_item_rows in po_map.items():
if po and po_item_rows:
po_obj = frappe.get_doc("Purchase Order", po)
if not ordered_warehouse:
frappe.throw(_("Warehouse is missing in Purchase Order"))
if po_obj.status in ["Stopped", "Cancelled"]:
frappe.throw(_("Material Request {0} is cancelled or stopped").format(po), frappe.InvalidStatusError)
if already_received_qty + d.qty > po_qty:
ordered_qty = - (po_qty - already_received_qty) * flt(d.conversion_factor)
else:
ordered_qty = - flt(d.qty) * flt(d.conversion_factor)
update_bin({
"item_code": d.item_code,
"warehouse": ordered_warehouse,
"posting_date": self.posting_date,
"ordered_qty": flt(ordered_qty) if self.docstatus==1 else -flt(ordered_qty)
})
po_obj.update_ordered_qty(po_item_rows)
def get_already_received_qty(self, po, po_detail):
qty = frappe.db.sql("""select sum(qty) from `tabPurchase Receipt Item`
@@ -265,11 +254,13 @@ class PurchaseReceipt(BuyingController):
frappe.db.set(self,'status','Cancelled')
self.update_ordered_qty()
self.update_stock_ledger()
self.update_prevdoc_status()
# Must be called after updating received qty in PO
self.update_ordered_qty()
pc_obj.update_last_purchase_rate(self, 0)
self.make_gl_entries_on_cancel()

View File

@@ -253,8 +253,9 @@ def update_serial_nos(sle, item_det):
from frappe.model.naming import make_autoname
serial_nos = []
for i in xrange(cint(sle.actual_qty)):
serial_nos.append(make_autoname(item_det.serial_no_series))
serial_nos.append(make_autoname(item_det.serial_no_series, "Serial No"))
frappe.db.set(sle, "serial_no", "\n".join(serial_nos))
validate_serial_no(sle, item_det)
if sle.serial_no:
serial_nos = get_serial_nos(sle.serial_no)

View File

@@ -39,8 +39,8 @@ class StockLedgerEntry(Document):
(self.warehouse, self.item_code, self.batch_no))[0][0])
if batch_bal_after_transaction < 0:
frappe.throw(_("Negative balance in Batch {0} for Item {1} at Warehouse {2} on {3} {4}").format(\
batch_bal_after_transaction - self.actual_qty, self.item_code, self.warehouse,
frappe.throw(_("Negative balance {0} in Batch {1} for Item {2} at Warehouse {3} on {4} {5}")
.format(batch_bal_after_transaction - self.actual_qty, self.batch_no, self.item_code, self.warehouse,
formatdate(self.posting_date), self.posting_time))
def validate_mandatory(self):

View File

@@ -1 +0,0 @@
Average "age" of an Item in a particular Warehouse based on First-in-first-out (FIFO).

View File

@@ -1 +0,0 @@
from __future__ import unicode_literals

View File

@@ -1,183 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
frappe.pages['stock-ageing'].onload = function(wrapper) {
frappe.ui.make_app_page({
parent: wrapper,
title: __('Stock Ageing'),
single_column: true
});
new erpnext.StockAgeing(wrapper);
wrapper.appframe.add_module_icon("Stock")
}
frappe.require("assets/erpnext/js/stock_grid_report.js");
erpnext.StockAgeing = erpnext.StockGridReport.extend({
init: function(wrapper) {
this._super({
title: __("Stock Ageing"),
page: wrapper,
parent: $(wrapper).find('.layout-main'),
appframe: wrapper.appframe,
doctypes: ["Item", "Warehouse", "Stock Ledger Entry", "Item Group", "Brand", "Serial No"],
})
},
setup_columns: function() {
this.columns = [
{id: "name", name: __("Item"), field: "name", width: 300,
link_formatter: {
open_btn: true,
doctype: '"Item"'
}},
{id: "item_name", name: __("Item Name"), field: "item_name",
width: 100, formatter: this.text_formatter},
{id: "description", name: __("Description"), field: "description",
width: 200, formatter: this.text_formatter},
{id: "brand", name: __("Brand"), field: "brand", width: 100},
{id: "average_age", name: __("Average Age"), field: "average_age",
formatter: this.currency_formatter},
{id: "earliest", name: __("Earliest"), field: "earliest",
formatter: this.currency_formatter},
{id: "latest", name: __("Latest"), field: "latest",
formatter: this.currency_formatter},
{id: "stock_uom", name: "UOM", field: "stock_uom", width: 100},
];
},
filters: [
{fieldtype:"Select", label: __("Warehouse"), link:"Warehouse",
default_value: "Select Warehouse..."},
{fieldtype:"Select", label: __("Brand"), link:"Brand",
default_value: "Select Brand...", filter: function(val, item, opts) {
return val == opts.default_value || item.brand == val;
}, link_formatter: {filter_input: "brand"}},
{fieldtype:"Select", label: __("Plot By"),
options: ["Average Age", "Earliest", "Latest"]},
{fieldtype:"Date", label: __("To Date")},
{fieldtype:"Button", label: __("Refresh"), icon:"icon-refresh icon-white"},
{fieldtype:"Button", label: __("Reset Filters"), icon: "icon-filter"}
],
setup_filters: function() {
var me = this;
this._super();
this.trigger_refresh_on_change(["warehouse", "plot_by", "brand"]);
this.show_zero_check();
},
init_filter_values: function() {
this._super();
this.filter_inputs.to_date.val(dateutil.obj_to_user(new Date()));
},
prepare_data: function() {
var me = this;
if(!this.data) {
me._data = frappe.report_dump.data["Item"];
me.item_by_name = me.make_name_map(me._data);
}
this.data = [].concat(this._data);
this.serialized_buying_rates = this.get_serialized_buying_rates();
$.each(this.data, function(i, d) {
me.reset_item_values(d);
});
this.prepare_balances();
// filter out brand
this.data = $.map(this.data, function(d) {
return me.apply_filter(d, "brand") ? d : null;
});
// filter out rows with zero values
this.data = $.map(this.data, function(d) {
return me.apply_zero_filter(null, d, null, me) ? d : null;
});
},
prepare_balances: function() {
var me = this;
var to_date = dateutil.str_to_obj(this.to_date);
var data = frappe.report_dump.data["Stock Ledger Entry"];
this.item_warehouse = {};
for(var i=0, j=data.length; i<j; i++) {
var sl = data[i];
var posting_date = dateutil.str_to_obj(sl.posting_date);
if(me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) {
var wh = me.get_item_warehouse(sl.warehouse, sl.item_code);
// call diff to build fifo stack in item_warehouse
var diff = me.get_value_diff(wh, sl, true);
if(posting_date > to_date)
break;
}
}
$.each(me.data, function(i, item) {
var full_fifo_stack = [];
if(me.is_default("warehouse")) {
$.each(me.item_warehouse[item.name] || {}, function(i, wh) {
full_fifo_stack = full_fifo_stack.concat(wh.fifo_stack || [])
});
} else {
full_fifo_stack = me.get_item_warehouse(me.warehouse, item.name).fifo_stack || [];
}
var age_qty = total_qty = 0.0;
var min_age = max_age = null;
$.each(full_fifo_stack, function(i, batch) {
var batch_age = dateutil.get_diff(me.to_date, batch[2]);
age_qty += batch_age * batch[0];
total_qty += batch[0];
max_age = Math.max(max_age, batch_age);
if(min_age===null) min_age=batch_age;
else min_age = Math.min(min_age, batch_age);
});
item.average_age = total_qty.toFixed(2)==0.0 ? 0
: (age_qty / total_qty).toFixed(2);
item.earliest = max_age || 0.0;
item.latest = min_age || 0.0;
});
this.data = this.data.sort(function(a, b) {
var sort_by = me.plot_by.replace(" ", "_").toLowerCase();
return b[sort_by] - a[sort_by];
});
},
get_plot_data: function() {
var data = [];
var me = this;
data.push({
label: me.plot_by,
data: $.map(me.data, function(item, idx) {
return [[idx+1, item[me.plot_by.replace(" ", "_").toLowerCase() ]]]
}),
bars: {show: true},
});
return data.length ? data : false;
},
get_plot_options: function() {
var me = this;
return {
grid: { hoverable: true, clickable: true },
xaxis: {
ticks: $.map(me.data, function(item, idx) { return [[idx+1, item.name]] }),
max: 15
},
series: { downsample: { threshold: 1000 } }
}
}
});

View File

@@ -1,23 +0,0 @@
{
"creation": "2012-09-21 20:15:14.000000",
"docstatus": 0,
"doctype": "Page",
"icon": "icon-table",
"idx": 1,
"modified": "2013-07-11 14:44:08.000000",
"modified_by": "Administrator",
"module": "Stock",
"name": "stock-ageing",
"owner": "Administrator",
"page_name": "stock-ageing",
"roles": [
{
"role": "Analytics"
},
{
"role": "Material Manager"
}
],
"standard": "Yes",
"title": "Stock Ageing"
}

View File

@@ -42,13 +42,12 @@ def get_columns():
def get_fifo_queue(filters):
item_details = {}
prev_qty = 0.0
for d in get_stock_ledger_entries(filters):
item_details.setdefault(d.name, {"details": d, "fifo_queue": []})
fifo_queue = item_details[d.name]["fifo_queue"]
if d.voucher_type == "Stock Reconciliation":
d.actual_qty = flt(d.qty_after_transaction) - flt(prev_qty)
d.actual_qty = flt(d.qty_after_transaction) - flt(item_details[d.name].get("qty_after_transaction", 0))
if d.actual_qty > 0:
fifo_queue.append([d.actual_qty, d.posting_date])
@@ -66,7 +65,7 @@ def get_fifo_queue(filters):
batch[0] -= qty_to_pop
qty_to_pop = 0
prev_qty = d.qty_after_transaction
item_details[d.name]["qty_after_transaction"] = d.qty_after_transaction
return item_details

View File

@@ -27,7 +27,7 @@ def make_sl_entries(sl_entries, is_amended=None):
if sle.get('is_cancelled') == 'Yes':
sle['actual_qty'] = -flt(sle['actual_qty'])
if sle.get("actual_qty") or sle.voucher_type=="Stock Reconciliation":
if sle.get("actual_qty") or sle.get("voucher_type")=="Stock Reconciliation":
sle_id = make_entry(sle)
args = sle.copy()

View File

@@ -100,7 +100,7 @@ def get_fifo_rate(previous_stock_queue, qty):
"""get FIFO (average) Rate from Queue"""
if qty >= 0:
total = sum(f[0] for f in previous_stock_queue)
return total and sum(f[0] * f[1] for f in previous_stock_queue) / flt(total) or 0.0
return sum(flt(f[0]) * flt(f[1]) for f in previous_stock_queue) / flt(total) if total else 0.0
else:
available_qty_for_outgoing, outgoing_cost = 0, 0
qty_to_pop = abs(qty)

View File

@@ -51,9 +51,14 @@ cur_frm.fields_dict['serial_no'].get_query = function(doc, cdt, cdn) {
['Serial No', 'docstatus', '!=', 2],
['Serial No', 'status', '=', "Delivered"]
];
if(doc.item_code) cond = ['Serial No', 'item_code', '=', doc.item_code];
if(doc.customer) cond = ['Serial No', 'customer', '=', doc.customer];
filter.push(cond);
if(doc.item_code) {
cond = ['Serial No', 'item_code', '=', doc.item_code];
filter.push(cond);
}
if(doc.customer) {
cond = ['Serial No', 'customer', '=', doc.customer];
filter.push(cond);
}
return{
filters:filter
}

View File

@@ -7,7 +7,7 @@
<div class="col-xs-5 text-right">
<label>{{ charge.get_formatted("description") }}</label></div>
<div class="col-xs-7 text-right">
{{ frappe.format_value(charge.tax_amount / doc.conversion_rate,
{{ frappe.format_value(frappe.utils.flt(charge.tax_amount) / doc.conversion_rate,
table_meta.get_field("tax_amount"), doc, currency=doc.currency) }}
</div>
</div>

View File

@@ -41,7 +41,7 @@ A Supplier exists with same name,وهناك مورد موجود مع نفس ال
A symbol for this currency. For e.g. $,رمزا لهذه العملة. على سبيل المثال ل$
AMC Expiry Date,AMC تاريخ انتهاء الاشتراك
Abbr,ابر
Abbreviation cannot have more than 5 characters,اختصار لا يمكن أن يكون أكثر من 5 أحرف
Abbreviation cannot have more than 5 characters,الاختصار لا يمكن أن يكون أكثر من 5 أحرف
Above Value,فوق القيمة
Absent,غائب
Acceptance Criteria,معايير القبول
@@ -69,7 +69,7 @@ Account {0} cannot be a Group,حساب {0} لا يمكن أن يكون مجمو
Account {0} does not belong to Company {1},حساب {0} لا ينتمي إلى شركة {1}
Account {0} does not belong to company: {1},حساب {0} لا تنتمي إلى الشركة: {1}
Account {0} does not exist,حساب {0} غير موجود
Account {0} has been entered more than once for fiscal year {1},حساب {0} تم إدخال أكثر من مرة للعام المالي {1}
Account {0} has been entered more than once for fiscal year {1},تم إدخال حساب {0} أكثر من مرة للعام المالي {1}
Account {0} is frozen,حساب {0} مجمد
Account {0} is inactive,حساب {0} غير نشط
Account {0} is not valid,حساب {0} غير صالح
@@ -85,8 +85,8 @@ Accounting,المحاسبة
"Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.",قيد محاسبي المجمدة تصل إلى هذا التاريخ، لا أحد يمكن أن تفعل / تعديل إدخال باستثناء دور المحددة أدناه.
Accounting journal entries.,المحاسبة إدخالات دفتر اليومية.
Accounts,حسابات
Accounts Browser,متصفح الحسابات
Accounts Frozen Upto,حسابات مجمدة لغاية
Accounts Browser,متصفح الحسابات
Accounts Frozen Upto,حسابات مجمدة حتي
Accounts Payable,ذمم دائنة
Accounts Receivable,حسابات القبض
Accounts Settings,إعدادات الحسابات
@@ -94,7 +94,7 @@ Active,نشط
Active: Will extract emails from ,نشط: سيتم استخراج رسائل البريد الإلكتروني من
Activity,نشاط
Activity Log,سجل النشاط
Activity Log:,النشاط المفتاح:
Activity Log:,:سجل النشاط
Activity Type,نوع النشاط
Actual,فعلي
Actual Budget,الميزانية الفعلية
@@ -253,8 +253,8 @@ Approving Role,الموافقة على دور
Approving Role cannot be same as role the rule is Applicable To,الموافقة دور لا يمكن أن يكون نفس دور القاعدة تنطبق على
Approving User,الموافقة العضو
Approving User cannot be same as user the rule is Applicable To,الموافقة العضو لا يمكن أن يكون نفس المستخدم القاعدة تنطبق على
Are you sure you want to STOP ,
Are you sure you want to UNSTOP ,
Are you sure you want to STOP ,Are you sure you want to STOP
Are you sure you want to UNSTOP ,Are you sure you want to UNSTOP
Arrear Amount,متأخرات المبلغ
"As Production Order can be made for this item, it must be a stock item.",كما يمكن أن يتم ترتيب الإنتاج لهذا البند، يجب أن يكون بند الأوراق المالية .
As per Stock UOM,وفقا للأوراق UOM
@@ -283,7 +283,7 @@ Auto Accounting For Stock Settings,السيارات المحاسبة المال
Auto Material Request,السيارات مادة طلب
Auto-raise Material Request if quantity goes below re-order level in a warehouse,لصناعة السيارات في رفع طلب المواد إذا كمية يذهب دون مستوى إعادة الطلب في مستودع
Automatically compose message on submission of transactions.,يؤلف تلقائيا رسالة على تقديم المعاملات.
Automatically extract Job Applicants from a mail box ,
Automatically extract Job Applicants from a mail box ,Automatically extract Job Applicants from a mail box
Automatically extract Leads from a mail box e.g.,استخراج الشراء تلقائيا من صندوق البريد على سبيل المثال
Automatically updated via Stock Entry of type Manufacture/Repack,تحديثها تلقائيا عن طريق إدخال الأسهم الصنع نوع / أعد حزم
Automotive,السيارات
@@ -410,16 +410,16 @@ Buying Settings,إعدادات الشراء
"Buying must be checked, if Applicable For is selected as {0}",يجب أن يتم التحقق الشراء، إذا تم تحديد مطبق للك {0}
C-Form,نموذج C-
C-Form Applicable,C-نموذج قابل للتطبيق
C-Form Invoice Detail,C-نموذج تفاصيل الفاتورة
C-Form No,C-الاستمارة رقم
C-Form records,سجلات نموذج C-
C-Form Invoice Detail, تفاصيل الفاتورة نموذج - س
C-Form No,رقم النموذج - س
C-Form records,سجلات النموذج - س
CENVAT Capital Goods,CENVAT السلع الرأسمالية
CENVAT Edu Cess,CENVAT ايدو سيس
CENVAT SHE Cess,CENVAT SHE سيس
CENVAT Service Tax,CENVAT ضريبة الخدمة
CENVAT Service Tax Cess 1,خدمة CENVAT ضريبة سيس 1
CENVAT Service Tax Cess 2,خدمة CENVAT ضريبة سيس 2
Calculate Based On,حساب الربح بناء على
Calculate Based On,إحسب الربح بناء على
Calculate Total Score,حساب النتيجة الإجمالية
Calendar Events,الأحداث
Call,دعوة
@@ -510,8 +510,8 @@ Clearance Date,إزالة التاريخ
Clearance Date not mentioned,إزالة التاريخ لم يرد ذكرها
Clearance date cannot be before check date in row {0},تاريخ التخليص لا يمكن أن يكون قبل تاريخ الاختيار في الصف {0}
Click on 'Make Sales Invoice' button to create a new Sales Invoice.,انقر على &#39;جعل مبيعات الفاتورة &quot;الزر لإنشاء فاتورة مبيعات جديدة.
Click on a link to get options to expand get options ,
Client,عميل
Click on a link to get options to expand get options ,Click on a link to get options to expand get options
Client,عميل
Close Balance Sheet and book Profit or Loss.,وثيقة الميزانية العمومية و كتاب الربح أو الخسارة .
Closed,مغلق
Closing (Cr),إغلاق (الكروم)
@@ -538,7 +538,7 @@ Commission on Sales,عمولة على المبيعات
Commission rate cannot be greater than 100,معدل العمولة لا يمكن أن يكون أكبر من 100
Communication,اتصالات
Communication HTML,الاتصالات HTML
Communication History,الاتصال التاريخ
Communication History,تاريخ الاتصال
Communication log.,سجل الاتصالات.
Communications,الاتصالات
Company,شركة
@@ -840,13 +840,13 @@ Distributor,موزع
Divorced,المطلقات
Do Not Contact,عدم الاتصال
Do not show any symbol like $ etc next to currencies.,لا تظهر أي رمز مثل $ الخ بجانب العملات.
Do really want to unstop production order: ,
Do you really want to STOP ,
Do really want to unstop production order: ,Do really want to unstop production order:
Do you really want to STOP ,Do you really want to STOP
Do you really want to STOP this Material Request?,هل تريد حقا لوقف هذا طلب المواد ؟
Do you really want to Submit all Salary Slip for month {0} and year {1},هل تريد حقا لتقديم كل زلة الرواتب ل شهر {0} و السنة {1}
Do you really want to UNSTOP ,
Do you really want to UNSTOP ,Do you really want to UNSTOP
Do you really want to UNSTOP this Material Request?,هل تريد حقا أن نزع السدادة هذا طلب المواد ؟
Do you really want to stop production order: ,
Do you really want to stop production order: ,Do you really want to stop production order:
Doc Name,اسم الوثيقة
Doc Type,نوع الوثيقة
Document Description,وصف الوثيقة
@@ -898,7 +898,7 @@ Electronics,إلكترونيات
Email,البريد الإلكتروني
Email Digest,البريد الإلكتروني دايجست
Email Digest Settings,البريد الإلكتروني إعدادات دايجست
Email Digest: ,
Email Digest: ,Email Digest:
Email Id,البريد الإلكتروني معرف
"Email Id where a job applicant will email e.g. ""jobs@example.com""",معرف البريد الإلكتروني حيث طالب العمل سوف البريد الإلكتروني على سبيل المثال &quot;jobs@example.com&quot;
Email Notifications,إشعارات البريد الإلكتروني
@@ -958,7 +958,7 @@ Enter url parameter for receiver nos,أدخل عنوان URL لمعلمة NOS ا
Entertainment & Leisure,الترفيه وترفيهية
Entertainment Expenses,مصاريف الترفيه
Entries,مقالات
Entries against ,
Entries against ,Entries against
Entries are not allowed against this Fiscal Year if the year is closed.,لا يسمح مقالات ضد السنة المالية الحالية إذا تم إغلاق السنة.
Equity,إنصاف
Error: {0} > {1},الخطأ: {0} > {1}
@@ -1573,7 +1573,7 @@ Maintenance Visit Purpose,صيانة زيارة الغرض
Maintenance Visit {0} must be cancelled before cancelling this Sales Order,صيانة زيارة {0} يجب أن يتم إلغاء هذا الأمر قبل إلغاء المبيعات
Maintenance start date can not be before delivery date for Serial No {0},صيانة تاريخ بداية لا يمكن أن يكون قبل تاريخ التسليم لل رقم المسلسل {0}
Major/Optional Subjects,الرئيسية / اختياري الموضوعات
Make ,
Make ,Make
Make Accounting Entry For Every Stock Movement,جعل الدخول المحاسبة للحصول على كل حركة الأسهم
Make Bank Voucher,جعل قسيمة البنك
Make Credit Note,جعل الائتمان ملاحظة
@@ -1722,7 +1722,7 @@ Net Weight UOM,الوزن الصافي UOM
Net Weight of each Item,الوزن الصافي لكل بند
Net pay cannot be negative,صافي الأجور لا يمكن أن تكون سلبية
Never,أبدا
New ,
New ,New
New Account,حساب جديد
New Account Name,اسم الحساب الجديد
New BOM,BOM جديدة
@@ -2448,7 +2448,7 @@ Rounded Off,تقريبها
Rounded Total,تقريب إجمالي
Rounded Total (Company Currency),المشاركات تقريب (العملة الشركة)
Row # ,الصف #
Row # {0}: ,
Row # {0}: ,Row # {0}:
Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master).,الصف # {0}: الكمية المطلوبة لا يمكن أن أقل من الحد الأدنى الكمية النظام القطعة (المحددة في البند الرئيسي).
Row #{0}: Please specify Serial No for Item {1},الصف # {0}: يرجى تحديد رقم التسلسلي للتاريخ {1}
Row {0}: Account does not match with \ Purchase Invoice Credit To account,الصف {0}: الحساب لا يتطابق مع \ شراء فاتورة الائتمان لحساب
@@ -2750,7 +2750,7 @@ Stock Ageing,الأسهم شيخوخة
Stock Analytics,الأسهم تحليلات
Stock Assets,الموجودات الأسهم
Stock Balance,الأسهم الرصيد
Stock Entries already created for Production Order ,
Stock Entries already created for Production Order ,Stock Entries already created for Production Order
Stock Entry,الأسهم الدخول
Stock Entry Detail,الأسهم إدخال التفاصيل
Stock Expenses,مصاريف الأسهم
@@ -3300,24 +3300,24 @@ website page link,الموقع رابط الصفحة
{0} budget for Account {1} against Cost Center {2} will exceed by {3},{0} ميزانية الحساب {1} ضد مركز التكلفة {2} سيتجاوز التي كتبها {3}
{0} can not be negative,{0} لا يمكن أن تكون سلبية
{0} created,{0} خلق
{0} does not belong to Company {1},{0} لا تنتمي إلى شركة {1}
{0} does not belong to Company {1},{0} {لا تنتمي إلى شركة {1
{0} entered twice in Item Tax,{0} دخلت مرتين في ضريبة المدينة
{0} is an invalid email address in 'Notification Email Address',"{0} هو عنوان بريد إلكتروني غير صالح في ' عنوان البريد الإلكتروني إعلام """
{0} is mandatory,{0} إلزامي
{0} is mandatory for Item {1},{0} إلزامي القطعة ل {1}
{0} is mandatory for Item {1},{0} {إلزامي القطعة ل {1
{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}.,{0} إلزامي. ربما لا يتم إنشاء سجل سعر صرف العملة ل{1} إلى {2}.
{0} is not a stock Item,{0} ليس الأسهم الإغلاق
{0} is not a valid Batch Number for Item {1},{0} ليس رقم الدفعة صالحة لل تفاصيل {1}
{0} is not a valid Leave Approver. Removing row #{1}.,{0} ليس صحيحا اترك الموافق. إزالة الصف # {1}.
{0} is not a valid Leave Approver. Removing row #{1}.,{0} {ليس صحيحا اترك الموافق. إزالة الصف # {1.
{0} is not a valid email id,{0} ليس معرف بريد إلكتروني صحيح
{0} is now the default Fiscal Year. Please refresh your browser for the change to take effect.,{0} الآن الافتراضي السنة المالية. يرجى تحديث المتصفح ل التغيير نافذ المفعول .
{0} is required,{0} مطلوب
{0} must be a Purchased or Sub-Contracted Item in row {1},{0} يجب أن يكون البند شراؤها أو التعاقد الفرعي في الصف {1}
{0} must be reduced by {1} or you should increase overflow tolerance,{0} يجب تخفيض كتبها {1} أو يجب زيادة الفائض التسامح
{0} must have role 'Leave Approver',{0} يجب أن يكون دور ' اترك الموافق '
{0} valid serial nos for Item {1},{0} غ المسلسل صالحة لل تفاصيل {1}
{0} {1} against Bill {2} dated {3},{0} {1} ضد بيل {2} بتاريخ {3}
{0} {1} against Invoice {2},{0} {1} ضد الفاتورة {2}
{0} valid serial nos for Item {1},{0} {غ المسلسل صالحة لل تفاصيل {1
{0} {1} against Bill {2} dated {3},{0} {1} {ضد بيل {2} بتاريخ {3
{0} {1} against Invoice {2},{0} {1} {ضد الفاتورة {2
{0} {1} has already been submitted,{0} {1} وقد تم بالفعل قدمت
{0} {1} has been modified. Please refresh.,{0} {1} تم تعديل . يرجى تحديث.
{0} {1} is not submitted,{0} {1} لا تقدم
1 and year: والسنة:
41 A symbol for this currency. For e.g. $ رمزا لهذه العملة. على سبيل المثال ل$
42 AMC Expiry Date AMC تاريخ انتهاء الاشتراك
43 Abbr ابر
44 Abbreviation cannot have more than 5 characters اختصار لا يمكن أن يكون أكثر من 5 أحرف الاختصار لا يمكن أن يكون أكثر من 5 أحرف
45 Above Value فوق القيمة
46 Absent غائب
47 Acceptance Criteria معايير القبول
69 Account {0} does not belong to Company {1} حساب {0} لا ينتمي إلى شركة {1}
70 Account {0} does not belong to company: {1} حساب {0} لا تنتمي إلى الشركة: {1}
71 Account {0} does not exist حساب {0} غير موجود
72 Account {0} has been entered more than once for fiscal year {1} حساب {0} تم إدخال أكثر من مرة للعام المالي {1} تم إدخال حساب {0} أكثر من مرة للعام المالي {1}
73 Account {0} is frozen حساب {0} مجمد
74 Account {0} is inactive حساب {0} غير نشط
75 Account {0} is not valid حساب {0} غير صالح
85 Accounting entry frozen up to this date, nobody can do / modify entry except role specified below. قيد محاسبي المجمدة تصل إلى هذا التاريخ، لا أحد يمكن أن تفعل / تعديل إدخال باستثناء دور المحددة أدناه.
86 Accounting journal entries. المحاسبة إدخالات دفتر اليومية.
87 Accounts حسابات
88 Accounts Browser متصفح الحسابات متصفح الحسابات
89 Accounts Frozen Upto حسابات مجمدة لغاية حسابات مجمدة حتي
90 Accounts Payable ذمم دائنة
91 Accounts Receivable حسابات القبض
92 Accounts Settings إعدادات الحسابات
94 Active: Will extract emails from نشط: سيتم استخراج رسائل البريد الإلكتروني من
95 Activity نشاط
96 Activity Log سجل النشاط
97 Activity Log: النشاط المفتاح: :سجل النشاط
98 Activity Type نوع النشاط
99 Actual فعلي
100 Actual Budget الميزانية الفعلية
253 Approving Role cannot be same as role the rule is Applicable To الموافقة دور لا يمكن أن يكون نفس دور القاعدة تنطبق على
254 Approving User الموافقة العضو
255 Approving User cannot be same as user the rule is Applicable To الموافقة العضو لا يمكن أن يكون نفس المستخدم القاعدة تنطبق على
256 Are you sure you want to STOP Are you sure you want to STOP
257 Are you sure you want to UNSTOP Are you sure you want to UNSTOP
258 Arrear Amount متأخرات المبلغ
259 As Production Order can be made for this item, it must be a stock item. كما يمكن أن يتم ترتيب الإنتاج لهذا البند، يجب أن يكون بند الأوراق المالية .
260 As per Stock UOM وفقا للأوراق UOM
283 Auto Material Request السيارات مادة طلب
284 Auto-raise Material Request if quantity goes below re-order level in a warehouse لصناعة السيارات في رفع طلب المواد إذا كمية يذهب دون مستوى إعادة الطلب في مستودع
285 Automatically compose message on submission of transactions. يؤلف تلقائيا رسالة على تقديم المعاملات.
286 Automatically extract Job Applicants from a mail box Automatically extract Job Applicants from a mail box
287 Automatically extract Leads from a mail box e.g. استخراج الشراء تلقائيا من صندوق البريد على سبيل المثال
288 Automatically updated via Stock Entry of type Manufacture/Repack تحديثها تلقائيا عن طريق إدخال الأسهم الصنع نوع / أعد حزم
289 Automotive السيارات
410 Buying must be checked, if Applicable For is selected as {0} يجب أن يتم التحقق الشراء، إذا تم تحديد مطبق للك {0}
411 C-Form نموذج C-
412 C-Form Applicable C-نموذج قابل للتطبيق
413 C-Form Invoice Detail C-نموذج تفاصيل الفاتورة تفاصيل الفاتورة نموذج - س
414 C-Form No C-الاستمارة رقم رقم النموذج - س
415 C-Form records سجلات نموذج C- سجلات النموذج - س
416 CENVAT Capital Goods CENVAT السلع الرأسمالية
417 CENVAT Edu Cess CENVAT ايدو سيس
418 CENVAT SHE Cess CENVAT SHE سيس
419 CENVAT Service Tax CENVAT ضريبة الخدمة
420 CENVAT Service Tax Cess 1 خدمة CENVAT ضريبة سيس 1
421 CENVAT Service Tax Cess 2 خدمة CENVAT ضريبة سيس 2
422 Calculate Based On حساب الربح بناء على إحسب الربح بناء على
423 Calculate Total Score حساب النتيجة الإجمالية
424 Calendar Events الأحداث
425 Call دعوة
510 Clearance Date not mentioned إزالة التاريخ لم يرد ذكرها
511 Clearance date cannot be before check date in row {0} تاريخ التخليص لا يمكن أن يكون قبل تاريخ الاختيار في الصف {0}
512 Click on 'Make Sales Invoice' button to create a new Sales Invoice. انقر على &#39;جعل مبيعات الفاتورة &quot;الزر لإنشاء فاتورة مبيعات جديدة.
513 Click on a link to get options to expand get options Click on a link to get options to expand get options
514 Client عميل عميل
515 Close Balance Sheet and book Profit or Loss. وثيقة الميزانية العمومية و كتاب الربح أو الخسارة .
516 Closed مغلق
517 Closing (Cr) إغلاق (الكروم)
538 Commission rate cannot be greater than 100 معدل العمولة لا يمكن أن يكون أكبر من 100
539 Communication اتصالات
540 Communication HTML الاتصالات HTML
541 Communication History الاتصال التاريخ تاريخ الاتصال
542 Communication log. سجل الاتصالات.
543 Communications الاتصالات
544 Company شركة
840 Divorced المطلقات
841 Do Not Contact عدم الاتصال
842 Do not show any symbol like $ etc next to currencies. لا تظهر أي رمز مثل $ الخ بجانب العملات.
843 Do really want to unstop production order: Do really want to unstop production order:
844 Do you really want to STOP Do you really want to STOP
845 Do you really want to STOP this Material Request? هل تريد حقا لوقف هذا طلب المواد ؟
846 Do you really want to Submit all Salary Slip for month {0} and year {1} هل تريد حقا لتقديم كل زلة الرواتب ل شهر {0} و السنة {1}
847 Do you really want to UNSTOP Do you really want to UNSTOP
848 Do you really want to UNSTOP this Material Request? هل تريد حقا أن نزع السدادة هذا طلب المواد ؟
849 Do you really want to stop production order: Do you really want to stop production order:
850 Doc Name اسم الوثيقة
851 Doc Type نوع الوثيقة
852 Document Description وصف الوثيقة
898 Email البريد الإلكتروني
899 Email Digest البريد الإلكتروني دايجست
900 Email Digest Settings البريد الإلكتروني إعدادات دايجست
901 Email Digest: Email Digest:
902 Email Id البريد الإلكتروني معرف
903 Email Id where a job applicant will email e.g. "jobs@example.com" معرف البريد الإلكتروني حيث طالب العمل سوف البريد الإلكتروني على سبيل المثال &quot;jobs@example.com&quot;
904 Email Notifications إشعارات البريد الإلكتروني
958 Entertainment & Leisure الترفيه وترفيهية
959 Entertainment Expenses مصاريف الترفيه
960 Entries مقالات
961 Entries against Entries against
962 Entries are not allowed against this Fiscal Year if the year is closed. لا يسمح مقالات ضد السنة المالية الحالية إذا تم إغلاق السنة.
963 Equity إنصاف
964 Error: {0} > {1} الخطأ: {0} > {1}
1573 Maintenance Visit {0} must be cancelled before cancelling this Sales Order صيانة زيارة {0} يجب أن يتم إلغاء هذا الأمر قبل إلغاء المبيعات
1574 Maintenance start date can not be before delivery date for Serial No {0} صيانة تاريخ بداية لا يمكن أن يكون قبل تاريخ التسليم لل رقم المسلسل {0}
1575 Major/Optional Subjects الرئيسية / اختياري الموضوعات
1576 Make Make
1577 Make Accounting Entry For Every Stock Movement جعل الدخول المحاسبة للحصول على كل حركة الأسهم
1578 Make Bank Voucher جعل قسيمة البنك
1579 Make Credit Note جعل الائتمان ملاحظة
1722 Net Weight of each Item الوزن الصافي لكل بند
1723 Net pay cannot be negative صافي الأجور لا يمكن أن تكون سلبية
1724 Never أبدا
1725 New New
1726 New Account حساب جديد
1727 New Account Name اسم الحساب الجديد
1728 New BOM BOM جديدة
2448 Rounded Total تقريب إجمالي
2449 Rounded Total (Company Currency) المشاركات تقريب (العملة الشركة)
2450 Row # الصف #
2451 Row # {0}: Row # {0}:
2452 Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master). الصف # {0}: الكمية المطلوبة لا يمكن أن أقل من الحد الأدنى الكمية النظام القطعة (المحددة في البند الرئيسي).
2453 Row #{0}: Please specify Serial No for Item {1} الصف # {0}: يرجى تحديد رقم التسلسلي للتاريخ {1}
2454 Row {0}: Account does not match with \ Purchase Invoice Credit To account الصف {0}: الحساب لا يتطابق مع \ شراء فاتورة الائتمان لحساب
2750 Stock Analytics الأسهم تحليلات
2751 Stock Assets الموجودات الأسهم
2752 Stock Balance الأسهم الرصيد
2753 Stock Entries already created for Production Order Stock Entries already created for Production Order
2754 Stock Entry الأسهم الدخول
2755 Stock Entry Detail الأسهم إدخال التفاصيل
2756 Stock Expenses مصاريف الأسهم
3300 {0} budget for Account {1} against Cost Center {2} will exceed by {3} {0} ميزانية الحساب {1} ضد مركز التكلفة {2} سيتجاوز التي كتبها {3}
3301 {0} can not be negative {0} لا يمكن أن تكون سلبية
3302 {0} created {0} خلق
3303 {0} does not belong to Company {1} {0} لا تنتمي إلى شركة {1} {0} {لا تنتمي إلى شركة {1
3304 {0} entered twice in Item Tax {0} دخلت مرتين في ضريبة المدينة
3305 {0} is an invalid email address in 'Notification Email Address' {0} هو عنوان بريد إلكتروني غير صالح في ' عنوان البريد الإلكتروني إعلام "
3306 {0} is mandatory {0} إلزامي
3307 {0} is mandatory for Item {1} {0} إلزامي القطعة ل {1} {0} {إلزامي القطعة ل {1
3308 {0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}. {0} إلزامي. ربما لا يتم إنشاء سجل سعر صرف العملة ل{1} إلى {2}.
3309 {0} is not a stock Item {0} ليس الأسهم الإغلاق
3310 {0} is not a valid Batch Number for Item {1} {0} ليس رقم الدفعة صالحة لل تفاصيل {1}
3311 {0} is not a valid Leave Approver. Removing row #{1}. {0} ليس صحيحا اترك الموافق. إزالة الصف # {1}. {0} {ليس صحيحا اترك الموافق. إزالة الصف # {1.
3312 {0} is not a valid email id {0} ليس معرف بريد إلكتروني صحيح
3313 {0} is now the default Fiscal Year. Please refresh your browser for the change to take effect. {0} الآن الافتراضي السنة المالية. يرجى تحديث المتصفح ل التغيير نافذ المفعول .
3314 {0} is required {0} مطلوب
3315 {0} must be a Purchased or Sub-Contracted Item in row {1} {0} يجب أن يكون البند شراؤها أو التعاقد الفرعي في الصف {1}
3316 {0} must be reduced by {1} or you should increase overflow tolerance {0} يجب تخفيض كتبها {1} أو يجب زيادة الفائض التسامح
3317 {0} must have role 'Leave Approver' {0} يجب أن يكون دور ' اترك الموافق '
3318 {0} valid serial nos for Item {1} {0} غ المسلسل صالحة لل تفاصيل {1} {0} {غ المسلسل صالحة لل تفاصيل {1
3319 {0} {1} against Bill {2} dated {3} {0} {1} ضد بيل {2} بتاريخ {3} {0} {1} {ضد بيل {2} بتاريخ {3
3320 {0} {1} against Invoice {2} {0} {1} ضد الفاتورة {2} {0} {1} {ضد الفاتورة {2
3321 {0} {1} has already been submitted {0} {1} وقد تم بالفعل قدمت
3322 {0} {1} has been modified. Please refresh. {0} {1} تم تعديل . يرجى تحديث.
3323 {0} {1} is not submitted {0} {1} لا تقدم

File diff suppressed because it is too large Load Diff

View File

@@ -36,20 +36,20 @@
"<h4>Default Template</h4><p>Uses <a href=""http://jinja.pocoo.org/docs/templates/"">Jinja Templating</a> and all the fields of Address (including Custom Fields if any) will be available</p><pre><code>{{ address_line1 }}&lt;br&gt;{% if address_line2 %}{{ address_line2 }}&lt;br&gt;{% endif -%}{{ city }}&lt;br&gt;{% if state %}{{ state }}&lt;br&gt;{% endif -%}{% if pincode %} PIN: {{ pincode }}&lt;br&gt;{% endif -%}{{ country }}&lt;br&gt;{% if phone %}Phone: {{ phone }}&lt;br&gt;{% endif -%}{% if fax %}Fax: {{ fax }}&lt;br&gt;{% endif -%}{% if email_id %}Email: {{ email_id }}&lt;br&gt;{% endif -%}</code></pre>","<h4> Προεπιλογή Πρότυπο </ h4> <p> Χρήσεις <a href=""http://jinja.pocoo.org/docs/templates/""> Jinja Templating </ a> και όλα τα πεδία της Διεύθυνσης ( συμπεριλαμβανομένων των προσαρμοσμένων πεδίων, αν υπάρχουν) θα είναι διαθέσιμο </ p> <pre> <code> {{}} address_line1 <br> {% εάν address_line2%} {{}} address_line2 <br> { endif% -%} {{}} πόλη <br> {% αν το κράτος%} {{}} κατάσταση <br> {endif% -%} {% εάν pincode%} PIN: {{}} pincode <br> {endif% -%} {{}} χώρα <br> {% αν το τηλέφωνο%} Τηλέφωνο: {{}} τηλέφωνο <br> { endif% -%} {% εάν φαξ%} Fax: {{}} fax <br> {endif% -%} {% εάν email_id%} Email: {{}} email_id <br> ? {endif% -%} </ code> </ pre>"
A Customer Group exists with same name please change the Customer name or rename the Customer Group,Μια ομάδα πελατών υπάρχει με το ίδιο όνομα παρακαλούμε να αλλάξετε το όνομα του Πελάτη ή να μετονομάσετε την ομάδα πελατών
A Customer exists with same name,Ένας πελάτης υπάρχει με το ίδιο όνομα
A Lead with this email id should exist,Μια μολύβδου με αυτή την ταυτότητα ηλεκτρονικού ταχυδρομείου θα πρέπει να υπάρχει
A Lead with this email id should exist,Μια επαφή με αυτή τη διεύθυνση ηλεκτρονικού ταχυδρομείου θα πρέπει να υπάρχει
A Product or Service,Ένα Προϊόν ή Υπηρεσία
A Supplier exists with same name,Ένας προμηθευτής υπάρχει με το ίδιο όνομα
A symbol for this currency. For e.g. $,Ένα σύμβολο για το νόμισμα αυτό. Για παράδειγμα $
AMC Expiry Date,AMC Ημερομηνία Λήξης
Abbr,Συντ.
Abbreviation cannot have more than 5 characters,Μια συντομογραφία δεν μπορεί να έχει περισσότερα από 5 χαρακτήρες
Abbreviation cannot have more than 5 characters,Μια συντομογραφία δεν μπορεί να έχει περισσότερους από 5 χαρακτήρες
Above Value,Πάνω Value
Absent,Απών
Acceptance Criteria,Κριτήρια αποδοχής
Acceptance Criteria,Αποδοχή κριτήρίων
Accepted,Δεκτός
Accepted + Rejected Qty must be equal to Received quantity for Item {0},Αποδεκτές + Απορρίπτεται Ποσότητα πρέπει να είναι ίση με Ελήφθη ποσότητα για τη θέση {0}
Accepted Quantity,ΠΟΣΟΤΗΤΑ
Accepted Warehouse,Αποδεκτές αποθήκη
Accepted + Rejected Qty must be equal to Received quantity for Item {0},Η Αποδεκτή + η Απορριπτέα ποσότητα πρέπει να είναι ίση με ληφθήσα ποσότητα για τη θέση {0}
Accepted Quantity,Αποδεκτή ποσότητα
Accepted Warehouse,Αποδεκτή Aποθήκη
Account,Λογαριασμός
Account Balance,Υπόλοιπο Λογαριασμού
Account Created: {0},Ο λογαριασμός δημιουργήθηκε : {0}
@@ -57,8 +57,8 @@ Account Details,Στοιχεία Λογαριασμού
Account Head,Επικεφαλής λογαριασμού
Account Name,Όνομα λογαριασμού
Account Type,Είδος Λογαριασμού
"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","Το υπόλοιπο του λογαριασμού ήδη Credit, δεν σας επιτρέπεται να θέσει «Υπόλοιπο Must Be» ως «χρεωστικές»"
"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","Το υπόλοιπο του λογαριασμού ήδη Debit, δεν μπορείτε να ρυθμίσετε το 'Υπόλοιπο Must Be »ως« Δάνειο »"
"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","Το υπόλοιπο του λογαριασμού είναι ήδη πιστωτικό, δεν επιτρέπεται να ρυθμίσετε το «Υπόλοιπο πρέπει να είναι χρεωστικό»"
"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","Το υπόλοιπο του λογαριασμού ήδη χρεωστικό, δεν μπορείτε να ρυθμίσετε το 'Υπόλοιπο πρέπει να είναι ως Δάνειο »"
Account for the warehouse (Perpetual Inventory) will be created under this Account.,Λογαριασμός για την αποθήκη ( Perpetual Απογραφή ) θα δημιουργηθεί στο πλαίσιο του παρόντος λογαριασμού.
Account head {0} created,Κεφάλι Λογαριασμός {0} δημιουργήθηκε
Account must be a balance sheet account,Ο λογαριασμός πρέπει να είναι λογαριασμός του ισολογισμού
@@ -214,8 +214,8 @@ Amended From,Τροποποίηση Από
Amount,Ποσό
Amount (Company Currency),Ποσό (νόμισμα της Εταιρείας)
Amount Paid,Ποσό Αμειβόμενος
Amount to Bill,Ανέρχονται σε Bill
An Customer exists with same name,Υπάρχει ένα πελάτη με το ίδιο όνομα
Amount to Bill,Χρεώσιμο Ποσό
An Customer exists with same name,Υπάρχει πελάτης με το ίδιο όνομα
"An Item Group exists with same name, please change the item name or rename the item group","Ένα σημείο της ομάδας υπάρχει με το ίδιο όνομα , μπορείτε να αλλάξετε το όνομα του στοιχείου ή να μετονομάσετε την ομάδα στοιχείου"
"An item exists with same name ({0}), please change the item group name or rename the item","Ένα στοιχείο υπάρχει με το ίδιο όνομα ( {0} ) , παρακαλούμε να αλλάξετε το όνομα της ομάδας στοιχείου ή να μετονομάσετε το στοιχείο"
Analyst,αναλυτής
@@ -254,14 +254,14 @@ Approving Role,Έγκριση Ρόλος
Approving Role cannot be same as role the rule is Applicable To,"Έγκριση ρόλος δεν μπορεί να είναι ίδιο με το ρόλο , ο κανόνας είναι να εφαρμόζεται"
Approving User,Έγκριση χρήστη
Approving User cannot be same as user the rule is Applicable To,Την έγκριση του χρήστη δεν μπορεί να είναι ίδιο με το χρήστη ο κανόνας ισχύει για
Are you sure you want to STOP ,
Are you sure you want to UNSTOP ,
Are you sure you want to STOP ,Είσαστε σίγουροι πως θέλετε να σταματήσετε
Are you sure you want to UNSTOP ,Are you sure you want to UNSTOP
Arrear Amount,Καθυστερήσεις Ποσό
"As Production Order can be made for this item, it must be a stock item.","Όπως μπορεί να γίνει Παραγωγής παραγγελίας για το συγκεκριμένο προϊόν , θα πρέπει να είναι ένα στοιχείο υλικού."
As per Stock UOM,Όπως ανά Διαθέσιμο UOM
"As there are existing stock transactions for this item, you can not change the values of 'Has Serial No', 'Is Stock Item' and 'Valuation Method'","Δεδομένου ότι υπάρχουν χρηματιστηριακές συναλλαγές για αυτό το στοιχείο , δεν μπορείτε να αλλάξετε τις τιμές των « Έχει Αύξων αριθμός », « Είναι Stock σημείο » και « Μέθοδος αποτίμησης»"
Asset,προσόν
Assistant,βοηθός
Assistant,Βοηθός
Associate,Συνεργάτης
Atleast one of the Selling or Buying must be selected,Πρέπει να επιλεγεί τουλάχιστον μία από τις πωλήσεις ή την αγορά
Atleast one warehouse is mandatory,"Τουλάχιστον, μια αποθήκη είναι υποχρεωτική"
@@ -270,27 +270,27 @@ Attach Letterhead,Συνδέστε επιστολόχαρτο
Attach Logo,Συνδέστε Logo
Attach Your Picture,Προσαρμόστε την εικόνα σας
Attendance,Παρουσία
Attendance Date,Ημερομηνία Συμμετοχή
Attendance Details,Λεπτομέρειες Συμμετοχή
Attendance Date,Ημερομηνία Συμμετοχής
Attendance Details,Λεπτομέρειες Συμμετοχής
Attendance From Date,Συμμετοχή Από Ημερομηνία
Attendance From Date and Attendance To Date is mandatory,Συμμετοχή Από Ημερομηνία και φοίτηση μέχρι σήμερα είναι υποχρεωτική
Attendance To Date,Συμμετοχή σε Ημερομηνία
Attendance From Date and Attendance To Date is mandatory,Η συμμετοχή Από και Μέχρι είναι υποχρεωτική
Attendance To Date,Προσέλευση μέχρι Ημερομηνία
Attendance can not be marked for future dates,Συμμετοχή δεν μπορεί να επιλεγεί για τις μελλοντικές ημερομηνίες
Attendance for employee {0} is already marked,Συμμετοχή των εργαζομένων για {0} έχει ήδη σημειώνονται
Attendance record.,Ρεκόρ προσέλευσης.
Authorization Control,Έλεγχος της χορήγησης αδειών
Authorization Rule,Κανόνας Εξουσιοδότηση
Attendance for employee {0} is already marked,Συμμετοχή για εργαζομένο {0} έχει ήδη σημειώθει
Attendance record.,Καταχωρήσεις Προσέλευσης.
Authorization Control,Έλεγχος Εξουσιοδότησης
Authorization Rule,Κανόνας Εξουσιοδότησης
Auto Accounting For Stock Settings,Auto Λογιστικά Για Ρυθμίσεις Χρηματιστήριο
Auto Material Request,Αυτόματη Αίτηση Υλικό
Auto-raise Material Request if quantity goes below re-order level in a warehouse,Auto-raise Αίτηση Υλικό εάν η ποσότητα πέσει κάτω εκ νέου για το επίπεδο σε μια αποθήκη
Automatically compose message on submission of transactions.,Αυτόματη συνθέτουν το μήνυμα για την υποβολή των συναλλαγών .
Automatically extract Job Applicants from a mail box ,
Automatically extract Job Applicants from a mail box ,Automatically extract Job Applicants from a mail box
Automatically extract Leads from a mail box e.g.,"Αυτόματη εξαγωγή οδηγεί από ένα κουτί αλληλογραφίας , π.χ."
Automatically updated via Stock Entry of type Manufacture/Repack,Αυτόματη ενημέρωση μέσω είσοδο στα αποθέματα Κατασκευή Τύπος / Repack
Automotive,Αυτοκίνητο
Autoreply when a new mail is received,Autoreply όταν λαμβάνονται νέα μηνύματα
Available,Διαθέσιμος
Available Qty at Warehouse,Διαθέσιμο Ποσότητα σε αποθήκη
Available Qty at Warehouse,Διαθέσιμο Ποσότητα στην Αποθήκη
Available Stock for Packing Items,Διαθέσιμο Διαθέσιμο για είδη συσκευασίας
"Available in BOM, Delivery Note, Purchase Invoice, Production Order, Purchase Order, Purchase Receipt, Sales Invoice, Sales Order, Stock Entry, Timesheet","Διατίθεται σε BOM , Δελτίο Αποστολής , Τιμολόγιο Αγοράς , Παραγωγής Τάξης, Παραγγελία Αγοράς, Αγορά Παραλαβή , Πωλήσεις Τιμολόγιο , Πωλήσεις Τάξης , Stock Έναρξη , φύλλο κατανομής χρόνου"
Average Age,Μέσος όρος ηλικίας
@@ -511,7 +511,7 @@ Clearance Date,Ημερομηνία Εκκαθάριση
Clearance Date not mentioned,Εκκαθάριση Ημερομηνία που δεν αναφέρονται
Clearance date cannot be before check date in row {0},Ημερομηνία εκκαθάρισης δεν μπορεί να είναι πριν από την ημερομηνία άφιξης στη γραμμή {0}
Click on 'Make Sales Invoice' button to create a new Sales Invoice.,Κάντε κλικ στο «Κάνε Πωλήσεις Τιμολόγιο» για να δημιουργηθεί μια νέα τιμολογίου πώλησης.
Click on a link to get options to expand get options ,
Click on a link to get options to expand get options ,Click on a link to get options to expand get options
Client,Πελάτης
Close Balance Sheet and book Profit or Loss.,Κλείσιμο Ισολογισμού και των Αποτελεσμάτων βιβλίο ή απώλεια .
Closed,Κλειστό
@@ -841,13 +841,13 @@ Distributor,Διανομέας
Divorced,Διαζευγμένος
Do Not Contact,Μην Επικοινωνία
Do not show any symbol like $ etc next to currencies.,Να μην εμφανίζεται κανένα σύμβολο όπως $ κλπ δίπλα σε νομίσματα.
Do really want to unstop production order: ,
Do you really want to STOP ,
Do really want to unstop production order: ,Do really want to unstop production order:
Do you really want to STOP ,Do you really want to STOP
Do you really want to STOP this Material Request?,Θέλετε πραγματικά να σταματήσει αυτό το υλικό την Αίτηση Συμμετοχής;
Do you really want to Submit all Salary Slip for month {0} and year {1},Θέλετε πραγματικά να υποβληθούν όλα τα Slip Μισθός για το μήνα {0} και {1 χρόνο }
Do you really want to UNSTOP ,
Do you really want to UNSTOP ,Do you really want to UNSTOP
Do you really want to UNSTOP this Material Request?,Θέλετε πραγματικά να ξεβουλώνω αυτό Υλικό Αίτηση Συμμετοχής;
Do you really want to stop production order: ,
Do you really want to stop production order: ,Do you really want to stop production order:
Doc Name,Doc Name
Doc Type,Doc Τύπος
Document Description,Περιγραφή εγγράφου
@@ -899,7 +899,7 @@ Electronics,ηλεκτρονική
Email,Email
Email Digest,Email Digest
Email Digest Settings,Email Digest Ρυθμίσεις
Email Digest: ,
Email Digest: ,Email Digest:
Email Id,Id Email
"Email Id where a job applicant will email e.g. ""jobs@example.com""","Email Id, όπου ένας υποψήφιος θα e-mail π.χ. &quot;jobs@example.com&quot;"
Email Notifications,Ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου
@@ -959,7 +959,7 @@ Enter url parameter for receiver nos,Εισάγετε παράμετρο url γ
Entertainment & Leisure,Διασκέδαση & Leisure
Entertainment Expenses,Έξοδα Ψυχαγωγία
Entries,Καταχωρήσεις
Entries against ,
Entries against ,Entries against
Entries are not allowed against this Fiscal Year if the year is closed.,"Οι συμμετοχές δεν επιτρέπεται κατά το τρέχον οικονομικό έτος, εάν το έτος είναι κλειστή."
Equity,δικαιοσύνη
Error: {0} > {1},Σφάλμα : {0} > {1}
@@ -1480,18 +1480,18 @@ Language,Γλώσσα
Last Name,Επώνυμο
Last Purchase Rate,Τελευταία Τιμή Αγοράς
Latest,αργότερο
Lead,Μόλυβδος
Lead Details,Μόλυβδος Λεπτομέρειες
Lead Id,Μόλυβδος Id
Lead Name,Μόλυβδος Name
Lead Owner,Μόλυβδος Ιδιοκτήτης
Lead Source,Μόλυβδος Πηγή
Lead Status,Lead Κατάσταση
Lead Time Date,Μόλυβδος Ημερομηνία Ώρα
Lead Time Days,Μόλυβδος Ημέρες Ώρα
Lead Time days is number of days by which this item is expected in your warehouse. This days is fetched in Material Request when you select this item.,"Μόλυβδος μέρες είναι ο αριθμός των ημερών κατά τον οποίο το στοιχείο αυτό αναμένεται στην αποθήκη σας. Αυτό μέρες είναι παρατραβηγμένο σε αίτημα αφορά υλικό, όταν επιλέξετε αυτό το στοιχείο."
Lead Type,Μόλυβδος Τύπος
Lead must be set if Opportunity is made from Lead,Ο μόλυβδος πρέπει να οριστεί αν Ευκαιρία είναι κατασκευασμένο από μόλυβδο
Lead,Επαφή
Lead Details,Λεπτομέρειες Επαφής
Lead Id,Id Επαφής
Lead Name,Όνομα Επαφής
Lead Owner,Ιδιοκτήτης Επαφής
Lead Source,Από που προήρθε η Επαφή
Lead Status,Κατάσταση Επαφής
Lead Time Date,Ημερομηνία Ώρα Επαφής
Lead Time Days,Ημέρα Ώρα Επαφής
Lead Time days is number of days by which this item is expected in your warehouse. This days is fetched in Material Request when you select this item.,"Ο χρόνος παράδοσης σε ημέρες είναι ο αριθμός των ημερών κατά τον οποίο το στοιχείο αυτό αναμένεται στην αποθήκη σας. Αυτές οι μέρες αναφέρεται σε αίτημα που αφορά υλικό, όταν επιλέξετε αυτό το στοιχείο."
Lead Type,Τύπος Επαφής
Lead must be set if Opportunity is made from Lead,Η Επαφή πρέπει να οριστεί αν η Ευκαιρία προέρχεται από επαφή
Leave Allocation,Αφήστε Κατανομή
Leave Allocation Tool,Αφήστε το εργαλείο Κατανομή
Leave Application,Αφήστε Εφαρμογή
@@ -1574,7 +1574,7 @@ Maintenance Visit Purpose,Σκοπός Συντήρηση Επίσκεψη
Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Συντήρηση Επίσκεψη {0} πρέπει να ακυρωθεί πριν από την ακύρωση αυτής της παραγγελίας πώλησης
Maintenance start date can not be before delivery date for Serial No {0},Ημερομηνία έναρξης συντήρησης δεν μπορεί να είναι πριν από την ημερομηνία παράδοσης Αύξων αριθμός {0}
Major/Optional Subjects,Σημαντικές / προαιρετικά μαθήματα
Make ,
Make ,Make
Make Accounting Entry For Every Stock Movement,Κάντε Λογιστική καταχώρηση για κάθε Κίνημα Χρηματιστήριο
Make Bank Voucher,Κάντε Voucher Bank
Make Credit Note,Κάντε Πιστωτικό Σημείωμα
@@ -1723,7 +1723,7 @@ Net Weight UOM,Καθαρό Βάρος UOM
Net Weight of each Item,Καθαρό βάρος κάθε είδους
Net pay cannot be negative,Καθαρή αμοιβή δεν μπορεί να είναι αρνητική
Never,Ποτέ
New ,
New ,New
New Account,Νέος λογαριασμός
New Account Name,Νέο Όνομα λογαριασμού
New BOM,Νέα BOM
@@ -2449,7 +2449,7 @@ Rounded Off,στρογγυλοποιηθεί
Rounded Total,Στρογγυλεμένες Σύνολο
Rounded Total (Company Currency),Στρογγυλεμένες Σύνολο (νόμισμα της Εταιρείας)
Row # ,Row #
Row # {0}: ,
Row # {0}: ,Row # {0}:
Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master).,Σειρά # {0}: Διέταξε ποσότητα δεν μπορεί να μικρότερη από την ελάχιστη ποσότητα σειρά στοιχείου (όπως ορίζεται στο σημείο master).
Row #{0}: Please specify Serial No for Item {1},Σειρά # {0}: Παρακαλείστε να προσδιορίσετε Αύξων αριθμός για τη θέση {1}
Row {0}: Account does not match with \ Purchase Invoice Credit To account,Σειρά {0}: Ο λογαριασμός δεν ταιριάζει με \ τιμολογίου αγοράς πίστωση του λογαριασμού
@@ -3277,8 +3277,8 @@ Your support email id - must be a valid email - this is where your emails will c
[Select],[ Επιλέξτε ]
`Freeze Stocks Older Than` should be smaller than %d days.,` Τα αποθέματα Πάγωμα Παλαιότερο από ` θα πρέπει να είναι μικρότερη από % d ημέρες .
and,και
are not allowed.,δεν επιτρέπονται .
assigned by,ανατεθεί από
are not allowed.,δεν επιτρέπονται.
assigned by,Ανατέθηκε από
cannot be greater than 100,δεν μπορεί να είναι μεγαλύτερη από 100
"e.g. ""Build tools for builders""","π.χ. «Χτίστε εργαλεία για τους κατασκευαστές """
"e.g. ""MC""","π.χ. "" MC """
@@ -3317,7 +3317,7 @@ website page link,Ιστοσελίδα link της σελίδας
{0} must be reduced by {1} or you should increase overflow tolerance,{0} πρέπει να μειωθεί κατά {1} ή θα πρέπει να αυξήσει την ανοχή υπερχείλισης
{0} must have role 'Leave Approver',{0} πρέπει να έχει ρόλο « Αφήστε Έγκρισης »
{0} valid serial nos for Item {1},{0} έγκυρο σειριακό nos για τη θέση {1}
{0} {1} against Bill {2} dated {3},{0} {1} εναντίον Bill {2} { 3 με ημερομηνία }
{0} {1} against Bill {2} dated {3},{0} {1} εναντίον Bill {2} {3} με ημερομηνία
{0} {1} against Invoice {2},{0} {1} κατά Τιμολόγιο {2}
{0} {1} has already been submitted,{0} {1} έχει ήδη υποβληθεί
{0} {1} has been modified. Please refresh.,{0} {1} έχει τροποποιηθεί . Παρακαλώ ανανεώσετε .
1 (Half Day) (Μισή ημέρα)
36 <h4>Default Template</h4><p>Uses <a href="http://jinja.pocoo.org/docs/templates/">Jinja Templating</a> and all the fields of Address (including Custom Fields if any) will be available</p><pre><code>{{ address_line1 }}&lt;br&gt;{% if address_line2 %}{{ address_line2 }}&lt;br&gt;{% endif -%}{{ city }}&lt;br&gt;{% if state %}{{ state }}&lt;br&gt;{% endif -%}{% if pincode %} PIN: {{ pincode }}&lt;br&gt;{% endif -%}{{ country }}&lt;br&gt;{% if phone %}Phone: {{ phone }}&lt;br&gt;{% endif -%}{% if fax %}Fax: {{ fax }}&lt;br&gt;{% endif -%}{% if email_id %}Email: {{ email_id }}&lt;br&gt;{% endif -%}</code></pre> <h4> Προεπιλογή Πρότυπο </ h4> <p> Χρήσεις <a href="http://jinja.pocoo.org/docs/templates/"> Jinja Templating </ a> και όλα τα πεδία της Διεύθυνσης ( συμπεριλαμβανομένων των προσαρμοσμένων πεδίων, αν υπάρχουν) θα είναι διαθέσιμο </ p> <pre> <code> {{}} address_line1 <br> {% εάν address_line2%} {{}} address_line2 <br> { endif% -%} {{}} πόλη <br> {% αν το κράτος%} {{}} κατάσταση <br> {endif% -%} {% εάν pincode%} PIN: {{}} pincode <br> {endif% -%} {{}} χώρα <br> {% αν το τηλέφωνο%} Τηλέφωνο: {{}} τηλέφωνο <br> { endif% -%} {% εάν φαξ%} Fax: {{}} fax <br> {endif% -%} {% εάν email_id%} Email: {{}} email_id <br> ? {endif% -%} </ code> </ pre>
37 A Customer Group exists with same name please change the Customer name or rename the Customer Group Μια ομάδα πελατών υπάρχει με το ίδιο όνομα παρακαλούμε να αλλάξετε το όνομα του Πελάτη ή να μετονομάσετε την ομάδα πελατών
38 A Customer exists with same name Ένας πελάτης υπάρχει με το ίδιο όνομα
39 A Lead with this email id should exist Μια μολύβδου με αυτή την ταυτότητα ηλεκτρονικού ταχυδρομείου θα πρέπει να υπάρχει Μια επαφή με αυτή τη διεύθυνση ηλεκτρονικού ταχυδρομείου θα πρέπει να υπάρχει
40 A Product or Service Ένα Προϊόν ή Υπηρεσία
41 A Supplier exists with same name Ένας προμηθευτής υπάρχει με το ίδιο όνομα
42 A symbol for this currency. For e.g. $ Ένα σύμβολο για το νόμισμα αυτό. Για παράδειγμα $
43 AMC Expiry Date AMC Ημερομηνία Λήξης
44 Abbr Συντ.
45 Abbreviation cannot have more than 5 characters Μια συντομογραφία δεν μπορεί να έχει περισσότερα από 5 χαρακτήρες Μια συντομογραφία δεν μπορεί να έχει περισσότερους από 5 χαρακτήρες
46 Above Value Πάνω Value
47 Absent Απών
48 Acceptance Criteria Κριτήρια αποδοχής Αποδοχή κριτήρίων
49 Accepted Δεκτός
50 Accepted + Rejected Qty must be equal to Received quantity for Item {0} Αποδεκτές + Απορρίπτεται Ποσότητα πρέπει να είναι ίση με Ελήφθη ποσότητα για τη θέση {0} Η Αποδεκτή + η Απορριπτέα ποσότητα πρέπει να είναι ίση με ληφθήσα ποσότητα για τη θέση {0}
51 Accepted Quantity ΠΟΣΟΤΗΤΑ Αποδεκτή ποσότητα
52 Accepted Warehouse Αποδεκτές αποθήκη Αποδεκτή Aποθήκη
53 Account Λογαριασμός
54 Account Balance Υπόλοιπο Λογαριασμού
55 Account Created: {0} Ο λογαριασμός δημιουργήθηκε : {0}
57 Account Head Επικεφαλής λογαριασμού
58 Account Name Όνομα λογαριασμού
59 Account Type Είδος Λογαριασμού
60 Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit' Το υπόλοιπο του λογαριασμού ήδη Credit, δεν σας επιτρέπεται να θέσει «Υπόλοιπο Must Be» ως «χρεωστικές» Το υπόλοιπο του λογαριασμού είναι ήδη πιστωτικό, δεν επιτρέπεται να ρυθμίσετε το «Υπόλοιπο πρέπει να είναι χρεωστικό»
61 Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit' Το υπόλοιπο του λογαριασμού ήδη Debit, δεν μπορείτε να ρυθμίσετε το 'Υπόλοιπο Must Be »ως« Δάνειο » Το υπόλοιπο του λογαριασμού ήδη χρεωστικό, δεν μπορείτε να ρυθμίσετε το 'Υπόλοιπο πρέπει να είναι ως Δάνειο »
62 Account for the warehouse (Perpetual Inventory) will be created under this Account. Λογαριασμός για την αποθήκη ( Perpetual Απογραφή ) θα δημιουργηθεί στο πλαίσιο του παρόντος λογαριασμού.
63 Account head {0} created Κεφάλι Λογαριασμός {0} δημιουργήθηκε
64 Account must be a balance sheet account Ο λογαριασμός πρέπει να είναι λογαριασμός του ισολογισμού
214 Amount Ποσό
215 Amount (Company Currency) Ποσό (νόμισμα της Εταιρείας)
216 Amount Paid Ποσό Αμειβόμενος
217 Amount to Bill Ανέρχονται σε Bill Χρεώσιμο Ποσό
218 An Customer exists with same name Υπάρχει ένα πελάτη με το ίδιο όνομα Υπάρχει πελάτης με το ίδιο όνομα
219 An Item Group exists with same name, please change the item name or rename the item group Ένα σημείο της ομάδας υπάρχει με το ίδιο όνομα , μπορείτε να αλλάξετε το όνομα του στοιχείου ή να μετονομάσετε την ομάδα στοιχείου
220 An item exists with same name ({0}), please change the item group name or rename the item Ένα στοιχείο υπάρχει με το ίδιο όνομα ( {0} ) , παρακαλούμε να αλλάξετε το όνομα της ομάδας στοιχείου ή να μετονομάσετε το στοιχείο
221 Analyst αναλυτής
254 Approving Role cannot be same as role the rule is Applicable To Έγκριση ρόλος δεν μπορεί να είναι ίδιο με το ρόλο , ο κανόνας είναι να εφαρμόζεται
255 Approving User Έγκριση χρήστη
256 Approving User cannot be same as user the rule is Applicable To Την έγκριση του χρήστη δεν μπορεί να είναι ίδιο με το χρήστη ο κανόνας ισχύει για
257 Are you sure you want to STOP Είσαστε σίγουροι πως θέλετε να σταματήσετε
258 Are you sure you want to UNSTOP Are you sure you want to UNSTOP
259 Arrear Amount Καθυστερήσεις Ποσό
260 As Production Order can be made for this item, it must be a stock item. Όπως μπορεί να γίνει Παραγωγής παραγγελίας για το συγκεκριμένο προϊόν , θα πρέπει να είναι ένα στοιχείο υλικού.
261 As per Stock UOM Όπως ανά Διαθέσιμο UOM
262 As there are existing stock transactions for this item, you can not change the values of 'Has Serial No', 'Is Stock Item' and 'Valuation Method' Δεδομένου ότι υπάρχουν χρηματιστηριακές συναλλαγές για αυτό το στοιχείο , δεν μπορείτε να αλλάξετε τις τιμές των « Έχει Αύξων αριθμός », « Είναι Stock σημείο » και « Μέθοδος αποτίμησης»
263 Asset προσόν
264 Assistant βοηθός Βοηθός
265 Associate Συνεργάτης
266 Atleast one of the Selling or Buying must be selected Πρέπει να επιλεγεί τουλάχιστον μία από τις πωλήσεις ή την αγορά
267 Atleast one warehouse is mandatory Τουλάχιστον, μια αποθήκη είναι υποχρεωτική
270 Attach Logo Συνδέστε Logo
271 Attach Your Picture Προσαρμόστε την εικόνα σας
272 Attendance Παρουσία
273 Attendance Date Ημερομηνία Συμμετοχή Ημερομηνία Συμμετοχής
274 Attendance Details Λεπτομέρειες Συμμετοχή Λεπτομέρειες Συμμετοχής
275 Attendance From Date Συμμετοχή Από Ημερομηνία
276 Attendance From Date and Attendance To Date is mandatory Συμμετοχή Από Ημερομηνία και φοίτηση μέχρι σήμερα είναι υποχρεωτική Η συμμετοχή Από και Μέχρι είναι υποχρεωτική
277 Attendance To Date Συμμετοχή σε Ημερομηνία Προσέλευση μέχρι Ημερομηνία
278 Attendance can not be marked for future dates Συμμετοχή δεν μπορεί να επιλεγεί για τις μελλοντικές ημερομηνίες
279 Attendance for employee {0} is already marked Συμμετοχή των εργαζομένων για {0} έχει ήδη σημειώνονται Συμμετοχή για εργαζομένο {0} έχει ήδη σημειώθει
280 Attendance record. Ρεκόρ προσέλευσης. Καταχωρήσεις Προσέλευσης.
281 Authorization Control Έλεγχος της χορήγησης αδειών Έλεγχος Εξουσιοδότησης
282 Authorization Rule Κανόνας Εξουσιοδότηση Κανόνας Εξουσιοδότησης
283 Auto Accounting For Stock Settings Auto Λογιστικά Για Ρυθμίσεις Χρηματιστήριο
284 Auto Material Request Αυτόματη Αίτηση Υλικό
285 Auto-raise Material Request if quantity goes below re-order level in a warehouse Auto-raise Αίτηση Υλικό εάν η ποσότητα πέσει κάτω εκ νέου για το επίπεδο σε μια αποθήκη
286 Automatically compose message on submission of transactions. Αυτόματη συνθέτουν το μήνυμα για την υποβολή των συναλλαγών .
287 Automatically extract Job Applicants from a mail box Automatically extract Job Applicants from a mail box
288 Automatically extract Leads from a mail box e.g. Αυτόματη εξαγωγή οδηγεί από ένα κουτί αλληλογραφίας , π.χ.
289 Automatically updated via Stock Entry of type Manufacture/Repack Αυτόματη ενημέρωση μέσω είσοδο στα αποθέματα Κατασκευή Τύπος / Repack
290 Automotive Αυτοκίνητο
291 Autoreply when a new mail is received Autoreply όταν λαμβάνονται νέα μηνύματα
292 Available Διαθέσιμος
293 Available Qty at Warehouse Διαθέσιμο Ποσότητα σε αποθήκη Διαθέσιμο Ποσότητα στην Αποθήκη
294 Available Stock for Packing Items Διαθέσιμο Διαθέσιμο για είδη συσκευασίας
295 Available in BOM, Delivery Note, Purchase Invoice, Production Order, Purchase Order, Purchase Receipt, Sales Invoice, Sales Order, Stock Entry, Timesheet Διατίθεται σε BOM , Δελτίο Αποστολής , Τιμολόγιο Αγοράς , Παραγωγής Τάξης, Παραγγελία Αγοράς, Αγορά Παραλαβή , Πωλήσεις Τιμολόγιο , Πωλήσεις Τάξης , Stock Έναρξη , φύλλο κατανομής χρόνου
296 Average Age Μέσος όρος ηλικίας
511 Clearance Date not mentioned Εκκαθάριση Ημερομηνία που δεν αναφέρονται
512 Clearance date cannot be before check date in row {0} Ημερομηνία εκκαθάρισης δεν μπορεί να είναι πριν από την ημερομηνία άφιξης στη γραμμή {0}
513 Click on 'Make Sales Invoice' button to create a new Sales Invoice. Κάντε κλικ στο «Κάνε Πωλήσεις Τιμολόγιο» για να δημιουργηθεί μια νέα τιμολογίου πώλησης.
514 Click on a link to get options to expand get options Click on a link to get options to expand get options
515 Client Πελάτης
516 Close Balance Sheet and book Profit or Loss. Κλείσιμο Ισολογισμού και των Αποτελεσμάτων βιβλίο ή απώλεια .
517 Closed Κλειστό
841 Divorced Διαζευγμένος
842 Do Not Contact Μην Επικοινωνία
843 Do not show any symbol like $ etc next to currencies. Να μην εμφανίζεται κανένα σύμβολο όπως $ κλπ δίπλα σε νομίσματα.
844 Do really want to unstop production order: Do really want to unstop production order:
845 Do you really want to STOP Do you really want to STOP
846 Do you really want to STOP this Material Request? Θέλετε πραγματικά να σταματήσει αυτό το υλικό την Αίτηση Συμμετοχής;
847 Do you really want to Submit all Salary Slip for month {0} and year {1} Θέλετε πραγματικά να υποβληθούν όλα τα Slip Μισθός για το μήνα {0} και {1 χρόνο }
848 Do you really want to UNSTOP Do you really want to UNSTOP
849 Do you really want to UNSTOP this Material Request? Θέλετε πραγματικά να ξεβουλώνω αυτό Υλικό Αίτηση Συμμετοχής;
850 Do you really want to stop production order: Do you really want to stop production order:
851 Doc Name Doc Name
852 Doc Type Doc Τύπος
853 Document Description Περιγραφή εγγράφου
899 Email Email
900 Email Digest Email Digest
901 Email Digest Settings Email Digest Ρυθμίσεις
902 Email Digest: Email Digest:
903 Email Id Id Email
904 Email Id where a job applicant will email e.g. "jobs@example.com" Email Id, όπου ένας υποψήφιος θα e-mail π.χ. &quot;jobs@example.com&quot;
905 Email Notifications Ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου
959 Entertainment & Leisure Διασκέδαση & Leisure
960 Entertainment Expenses Έξοδα Ψυχαγωγία
961 Entries Καταχωρήσεις
962 Entries against Entries against
963 Entries are not allowed against this Fiscal Year if the year is closed. Οι συμμετοχές δεν επιτρέπεται κατά το τρέχον οικονομικό έτος, εάν το έτος είναι κλειστή.
964 Equity δικαιοσύνη
965 Error: {0} > {1} Σφάλμα : {0} > {1}
1480 Last Name Επώνυμο
1481 Last Purchase Rate Τελευταία Τιμή Αγοράς
1482 Latest αργότερο
1483 Lead Μόλυβδος Επαφή
1484 Lead Details Μόλυβδος Λεπτομέρειες Λεπτομέρειες Επαφής
1485 Lead Id Μόλυβδος Id Id Επαφής
1486 Lead Name Μόλυβδος Name Όνομα Επαφής
1487 Lead Owner Μόλυβδος Ιδιοκτήτης Ιδιοκτήτης Επαφής
1488 Lead Source Μόλυβδος Πηγή Από που προήρθε η Επαφή
1489 Lead Status Lead Κατάσταση Κατάσταση Επαφής
1490 Lead Time Date Μόλυβδος Ημερομηνία Ώρα Ημερομηνία Ώρα Επαφής
1491 Lead Time Days Μόλυβδος Ημέρες Ώρα Ημέρα Ώρα Επαφής
1492 Lead Time days is number of days by which this item is expected in your warehouse. This days is fetched in Material Request when you select this item. Μόλυβδος μέρες είναι ο αριθμός των ημερών κατά τον οποίο το στοιχείο αυτό αναμένεται στην αποθήκη σας. Αυτό μέρες είναι παρατραβηγμένο σε αίτημα αφορά υλικό, όταν επιλέξετε αυτό το στοιχείο. Ο χρόνος παράδοσης σε ημέρες είναι ο αριθμός των ημερών κατά τον οποίο το στοιχείο αυτό αναμένεται στην αποθήκη σας. Αυτές οι μέρες αναφέρεται σε αίτημα που αφορά υλικό, όταν επιλέξετε αυτό το στοιχείο.
1493 Lead Type Μόλυβδος Τύπος Τύπος Επαφής
1494 Lead must be set if Opportunity is made from Lead Ο μόλυβδος πρέπει να οριστεί αν Ευκαιρία είναι κατασκευασμένο από μόλυβδο Η Επαφή πρέπει να οριστεί αν η Ευκαιρία προέρχεται από επαφή
1495 Leave Allocation Αφήστε Κατανομή
1496 Leave Allocation Tool Αφήστε το εργαλείο Κατανομή
1497 Leave Application Αφήστε Εφαρμογή
1574 Maintenance Visit {0} must be cancelled before cancelling this Sales Order Συντήρηση Επίσκεψη {0} πρέπει να ακυρωθεί πριν από την ακύρωση αυτής της παραγγελίας πώλησης
1575 Maintenance start date can not be before delivery date for Serial No {0} Ημερομηνία έναρξης συντήρησης δεν μπορεί να είναι πριν από την ημερομηνία παράδοσης Αύξων αριθμός {0}
1576 Major/Optional Subjects Σημαντικές / προαιρετικά μαθήματα
1577 Make Make
1578 Make Accounting Entry For Every Stock Movement Κάντε Λογιστική καταχώρηση για κάθε Κίνημα Χρηματιστήριο
1579 Make Bank Voucher Κάντε Voucher Bank
1580 Make Credit Note Κάντε Πιστωτικό Σημείωμα
1723 Net Weight of each Item Καθαρό βάρος κάθε είδους
1724 Net pay cannot be negative Καθαρή αμοιβή δεν μπορεί να είναι αρνητική
1725 Never Ποτέ
1726 New New
1727 New Account Νέος λογαριασμός
1728 New Account Name Νέο Όνομα λογαριασμού
1729 New BOM Νέα BOM
2449 Rounded Total Στρογγυλεμένες Σύνολο
2450 Rounded Total (Company Currency) Στρογγυλεμένες Σύνολο (νόμισμα της Εταιρείας)
2451 Row # Row #
2452 Row # {0}: Row # {0}:
2453 Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master). Σειρά # {0}: Διέταξε ποσότητα δεν μπορεί να μικρότερη από την ελάχιστη ποσότητα σειρά στοιχείου (όπως ορίζεται στο σημείο master).
2454 Row #{0}: Please specify Serial No for Item {1} Σειρά # {0}: Παρακαλείστε να προσδιορίσετε Αύξων αριθμός για τη θέση {1}
2455 Row {0}: Account does not match with \ Purchase Invoice Credit To account Σειρά {0}: Ο λογαριασμός δεν ταιριάζει με \ τιμολογίου αγοράς πίστωση του λογαριασμού
3277 [Select] [ Επιλέξτε ]
3278 `Freeze Stocks Older Than` should be smaller than %d days. ` Τα αποθέματα Πάγωμα Παλαιότερο από ` θα πρέπει να είναι μικρότερη από % d ημέρες .
3279 and και
3280 are not allowed. δεν επιτρέπονται . δεν επιτρέπονται.
3281 assigned by ανατεθεί από Ανατέθηκε από
3282 cannot be greater than 100 δεν μπορεί να είναι μεγαλύτερη από 100
3283 e.g. "Build tools for builders" π.χ. «Χτίστε εργαλεία για τους κατασκευαστές "
3284 e.g. "MC" π.χ. " MC "
3317 {0} must be reduced by {1} or you should increase overflow tolerance {0} πρέπει να μειωθεί κατά {1} ή θα πρέπει να αυξήσει την ανοχή υπερχείλισης
3318 {0} must have role 'Leave Approver' {0} πρέπει να έχει ρόλο « Αφήστε Έγκρισης »
3319 {0} valid serial nos for Item {1} {0} έγκυρο σειριακό nos για τη θέση {1}
3320 {0} {1} against Bill {2} dated {3} {0} {1} εναντίον Bill {2} { 3 με ημερομηνία } {0} {1} εναντίον Bill {2} {3} με ημερομηνία
3321 {0} {1} against Invoice {2} {0} {1} κατά Τιμολόγιο {2}
3322 {0} {1} has already been submitted {0} {1} έχει ήδη υποβληθεί
3323 {0} {1} has been modified. Please refresh. {0} {1} έχει τροποποιηθεί . Παρακαλώ ανανεώσετε .

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ Accepted + Rejected Qty must be equal to Received quantity for Item {0},"La quan
Compte {0} doit être SAMES comme débit pour tenir compte de la facture de vente en ligne {0}"
Accepted Quantity,Quantité acceptés
Accepted Warehouse,Entrepôt acceptable
Account,compte
Account,Compte
Account Balance,Solde du compte
Account Created: {0},Compte créé : {0}
Account Details,Détails du compte
@@ -63,18 +63,18 @@ Account Type,Type de compte
Account for the warehouse (Perpetual Inventory) will be created under this Account.,Compte de l'entrepôt ( de l'inventaire permanent ) sera créé sous ce compte .
Account head {0} created,Responsable du compte {0} a été crée
Account must be a balance sheet account,Le compte doit être un bilan
Account with child nodes cannot be converted to ledger,Liste des prix non sélectionné
Account with existing transaction can not be converted to group.,{0} n'est pas un congé approbateur valide
Account with existing transaction can not be deleted,Compte avec la transaction existante ne peut pas être supprimé
Account with existing transaction cannot be converted to ledger,Compte avec la transaction existante ne peut pas être converti en livre
Account with child nodes cannot be converted to ledger,Un compte avec des enfants ne peut pas être converti en grand livre
Account with existing transaction can not be converted to group.,Un compte contenant une transaction ne peut pas être converti en groupe
Account with existing transaction can not be deleted,Un compte contenant une transaction ne peut pas être supprimé
Account with existing transaction cannot be converted to ledger,Un compte contenant une transaction ne peut pas être converti en grand livre
Account {0} cannot be a Group,Compte {0} ne peut pas être un groupe
Account {0} does not belong to Company {1},Compte {0} n'appartient pas à la société {1}
Account {0} does not belong to company: {1},Compte {0} n'appartient pas à l'entreprise: {1}
Account {0} does not belong to company: {1},Compte {0} n'appartient pas à la société : {1}
Account {0} does not exist,Compte {0} n'existe pas
Account {0} has been entered more than once for fiscal year {1},S'il vous plaît entrer « Répétez le jour du Mois de la« valeur de champ
Account {0} is frozen,Attention: Commande {0} existe déjà contre le même numéro de bon de commande
Account {0} is inactive,dépenses directes
Account {0} is not valid,Compte {0} n'est pas valide
Account {0} has been entered more than once for fiscal year {1},Le compte {0} a été renseigné plus d'une fois pour l'année fiscale {1}
Account {0} is frozen,Le compte {0} est gelé
Account {0} is inactive,Le compte {0} est inactif
Account {0} is not valid,Le compte {0} n'est pas valide
Account {0} must be of type 'Fixed Asset' as Item {1} is an Asset Item,Compte {0} doit être de type ' actif fixe ' comme objet {1} est un atout article
Account {0}: Parent account {1} can not be a ledger,Compte {0}: compte de Parent {1} ne peut pas être un grand livre
Account {0}: Parent account {1} does not belong to company: {2},Compte {0}: compte de Parent {1} n'appartient pas à l'entreprise: {2}
@@ -88,12 +88,12 @@ Accounting,Comptabilité
Accounting journal entries.,Les écritures comptables.
Accounts,Comptes
Accounts Browser,Navigateur des comptes
Accounts Frozen Upto,Jusqu&#39;à comptes gelés
Accounts Frozen Upto,Comptes gelés jusqu'au
Accounts Payable,Comptes à payer
Accounts Receivable,Débiteurs
Accounts Settings,Paramètres des comptes
Active,Actif
Active: Will extract emails from ,Actif: va extraire des emails à partir de
Active: Will extract emails from ,Actif : extraira les emails depuis
Activity,Activité
Activity Log,Journal d&#39;activité
Activity Log:,Journal d'activité:
@@ -104,7 +104,7 @@ Actual Completion Date,Date d&#39;achèvement réelle
Actual Date,Date Réelle
Actual End Date,Date de fin réelle
Actual Invoice Date,Date de la facture réelle
Actual Posting Date,Date réelle d&#39;affichage
Actual Posting Date,Date réelle d'envoie
Actual Qty,Quantité réelle
Actual Qty (at source/target),Quantité réelle (à la source / cible)
Actual Qty After Transaction,Qté réel Après Transaction
@@ -112,11 +112,11 @@ Actual Qty: Quantity available in the warehouse.,Quantité réelle : Quantité d
Actual Quantity,Quantité réelle
Actual Start Date,Date de début réelle
Add,Ajouter
Add / Edit Taxes and Charges,Ajouter / Modifier Taxes et frais
Add / Edit Taxes and Charges,Ajouter / Modifier Taxes et Charges
Add Child,Ajouter un enfant
Add Serial No,Ajouter Numéro de série
Add Taxes,Ajouter impôts
Add Taxes and Charges,Ajouter Taxes et frais
Add Taxes and Charges,Ajouter impôts et charges
Add or Deduct,Ajouter ou déduire
Add rows to set annual budgets on Accounts.,Ajoutez des lignes pour établir des budgets annuels sur des comptes.
Add to Cart,Ajouter au panier
@@ -130,9 +130,9 @@ Address Details,Détails de l&#39;adresse
Address HTML,Adresse HTML
Address Line 1,Adresse ligne 1
Address Line 2,Adresse ligne 2
Address Template,Adresse modèle
Address Template,Modèle d'adresse
Address Title,Titre de l'adresse
Address Title is mandatory.,Vous n'êtes pas autorisé à imprimer ce document
Address Title is mandatory.,Le titre de l'adresse est obligatoire
Address Type,Type d&#39;adresse
Address master.,Adresse principale
Administrative Expenses,Dépenses administratives
@@ -171,22 +171,22 @@ Airline,compagnie aérienne
All Addresses.,Toutes les adresses.
All Contact,Tout contact
All Contacts.,Tous les contacts.
All Customer Contact,Tout contact avec la clientèle
All Customer Groups,N ° de série {0} est sous contrat de maintenance jusqu'à {1}
All Customer Contact,Tous les contacts clients
All Customer Groups,Tous les groupes client
All Day,Toute la journée
All Employee (Active),Tous les employés (Actif)
All Item Groups,Tous les groupes des ouvrages
All Lead (Open),Tous plomb (Ouvert)
All Item Groups,Tous les groupes d'article
All Lead (Open),Toutes les pistes (Ouvertes)
All Products or Services.,Tous les produits ou services.
All Sales Partner Contact,Tout contact Sales Partner
All Sales Person,Tout Sales Person
All Supplier Contact,Toutes Contacter le fournisseur
All Sales Partner Contact,Tous les contacts des partenaires commerciaux
All Sales Person,Tous les commerciaux
All Supplier Contact,Tous les contacts fournisseur
All Supplier Types,Tous les types de fournisseurs
All Territories,Compte racine ne peut pas être supprimé
All Territories,Tous les secteurs
"All export related fields like currency, conversion rate, export total, export grand total etc are available in Delivery Note, POS, Quotation, Sales Invoice, Sales Order etc.","Tous les champs liés à l'exportation comme monnaie , taux de conversion , l'exportation totale , l'exportation totale grandiose etc sont disponibles dans la note de livraison , POS , offre , facture de vente , Sales Order etc"
"All import related fields like currency, conversion rate, import total, import grand total etc are available in Purchase Receipt, Supplier Quotation, Purchase Invoice, Purchase Order etc.","Tous les champs importation connexes comme monnaie , taux de conversion , totale d'importation , importation grande etc totale sont disponibles en Achat réception , Fournisseur d'offre , facture d'achat , bon de commande , etc"
All items have already been invoiced,Tous les articles ont déjà été facturés
All these items have already been invoiced,Existe compte de l'enfant pour ce compte . Vous ne pouvez pas supprimer ce compte .
All these items have already been invoiced,Tous les articles ont déjà été facturés
Allocate,Allouer
Allocate leaves for a period.,Compte temporaire ( actif)
Allocate leaves for the year.,Allouer des feuilles de l&#39;année.
@@ -199,10 +199,10 @@ Allow Bill of Materials,Laissez Bill of Materials
Allow Bill of Materials should be 'Yes'. Because one or many active BOMs present for this item,Commande {0} n'est pas valide
Allow Children,permettre aux enfants
Allow Dropbox Access,Autoriser l'accès au Dropbox
Allow Google Drive Access,Autoriser Google Drive accès
Allow Negative Balance,Laissez solde négatif
Allow Negative Stock,Laissez Stock Négatif
Allow Production Order,Laissez un ordre de fabrication
Allow Google Drive Access,Autoriser l'accès à Google Drive
Allow Negative Balance,Autoriser un solde négatif
Allow Negative Stock,Autoriser un stock négatif
Allow Production Order,Permettre les ordres de fabrication
Allow User,Permettre à l&#39;utilisateur
Allow Users,Autoriser les utilisateurs
Allow the following users to approve Leave Applications for block days.,Autoriser les utilisateurs suivants d&#39;approuver demandes d&#39;autorisation pour les jours de bloc.
@@ -211,14 +211,14 @@ Allowance Percent,Pourcentage allocation
Allowance for over-{0} crossed for Item {1},Allocation pour les plus de {0} croisés pour objet {1}
Allowance for over-{0} crossed for Item {1}.,Allocation pour les plus de {0} franchi pour objet {1}.
Allowed Role to Edit Entries Before Frozen Date,Autorisé rôle à modifier les entrées Avant Frozen date
Amended From,De modifiée
Amended From,Modifié depuis
Amount,Montant
Amount (Company Currency),Montant (Société Monnaie)
Amount Paid,Montant payé
Amount to Bill,Montant du projet de loi
An Customer exists with same name,Il existe un client avec le même nom
"An Item Group exists with same name, please change the item name or rename the item group","Un groupe d'objet existe avec le même nom , s'il vous plaît changer le nom de l'élément ou de renommer le groupe de l'article"
"An item exists with same name ({0}), please change the item group name or rename the item",Le compte doit être un compte de bilan
"An Item Group exists with same name, please change the item name or rename the item group","Un groupe d'article existe avec le même nom, changez le nom de l'article ou renommez le groupe d'article SVP"
"An item exists with same name ({0}), please change the item group name or rename the item","Un article existe avec le même nom ({0}), changez le groupe de l'article ou renommez l'article SVP"
Analyst,analyste
Annual,Annuel
Another Period Closing Entry {0} has been made after {1},Point Wise impôt Détail
@@ -246,17 +246,17 @@ Appraisal Template,Modèle d&#39;évaluation
Appraisal Template Goal,Objectif modèle d&#39;évaluation
Appraisal Template Title,Titre modèle d&#39;évaluation
Appraisal {0} created for Employee {1} in the given date range,Soulager date doit être supérieure à date d'adhésion
Apprentice,apprenti
Apprentice,Apprenti
Approval Status,Statut d&#39;approbation
Approval Status must be 'Approved' or 'Rejected',non autorisé
Approval Status must be 'Approved' or 'Rejected',Le statut d'approbation doit être 'Approuvé' ou 'Rejeté'
Approved,Approuvé
Approver,Approbateur
Approving Role,Approuver rôle
Approving Role cannot be same as role the rule is Applicable To,Vous ne pouvez pas sélectionner le type de charge comme « Sur la ligne précédente Montant » ou « Le précédent Row totale » pour la première rangée
Approving User,Approuver l&#39;utilisateur
Approving User cannot be same as user the rule is Applicable To,Approuver l'utilisateur ne peut pas être identique à l'utilisateur la règle est applicable aux
Are you sure you want to STOP ,
Are you sure you want to UNSTOP ,
Are you sure you want to STOP ,Are you sure you want to STOP
Are you sure you want to UNSTOP ,Are you sure you want to UNSTOP
Arrear Amount,Montant échu
"As Production Order can be made for this item, it must be a stock item.","Comme ordre de fabrication peut être faite de cet élément, il doit être un article en stock ."
As per Stock UOM,Selon Stock UDM
@@ -265,11 +265,11 @@ Asset,atout
Assistant,assistant
Associate,associé
Atleast one of the Selling or Buying must be selected,Au moins un de la vente ou l'achat doit être sélectionné
Atleast one warehouse is mandatory,Atleast un entrepôt est obligatoire
Attach Image,suivant
Attach Letterhead,Fixez -tête
Attach Logo,S'il vous plaît sélectionner un fichier csv valide avec les données
Attach Your Picture,Liquidation Date non mentionné
Atleast one warehouse is mandatory,Au moins un entrepôt est obligatoire
Attach Image,Joindre l'image
Attach Letterhead,Joindre l'entête
Attach Logo,Joindre le logo
Attach Your Picture,Joindre votre photo
Attendance,Présence
Attendance Date,Date de Participation
Attendance Details,Détails de présence
@@ -285,7 +285,7 @@ Auto Accounting For Stock Settings,Auto Comptabilité Pour les paramètres de dr
Auto Material Request,Auto Demande de Matériel
Auto-raise Material Request if quantity goes below re-order level in a warehouse,Auto-raise Demande de Matériel si la quantité va en dessous du niveau de re-commande dans un entrepôt
Automatically compose message on submission of transactions.,Composer automatiquement un message sur la soumission de transactions .
Automatically extract Job Applicants from a mail box ,
Automatically extract Job Applicants from a mail box ,Automatically extract Job Applicants from a mail box
Automatically extract Leads from a mail box e.g.,Extraire automatiquement des prospects à partir d'une boîte aux lettres par exemple
Automatically updated via Stock Entry of type Manufacture/Repack,Automatiquement mis à jour via l&#39;entrée de fabrication de type Stock / Repack
Automotive,automobile
@@ -369,7 +369,7 @@ Billed Amount,Montant facturé
Billed Amt,Bec Amt
Billing,Facturation
Billing Address,Adresse de facturation
Billing Address Name,Facturation Nom Adresse
Billing Address Name,Nom de l'adresse de facturation
Billing Status,Statut de la facturation
Bills raised by Suppliers.,Factures soulevé par les fournisseurs.
Bills raised to Customers.,Factures aux clients soulevé.
@@ -380,10 +380,10 @@ Birthday,anniversaire
Block Date,Date de bloquer
Block Days,Bloquer les jours
Block leave applications by department.,Bloquer les demandes d&#39;autorisation par le ministère.
Blog Post,Blog
Blog Post,Article de blog
Blog Subscriber,Abonné Blog
Blood Group,Groupe sanguin
Both Warehouse must belong to same Company,Les deux Entrepôt doit appartenir à une même entreprise
Both Warehouse must belong to same Company,Les deux Entrepôt doivent appartenir à la même entreprise
Box,boîte
Branch,Branche
Brand,Marque
@@ -406,7 +406,7 @@ Build Report,Créer un rapport
Bundle items at time of sale.,Regrouper des envois au moment de la vente.
Business Development Manager,Directeur du développement des affaires
Buying,Achat
Buying & Selling,Fin d'année financière Date
Buying & Selling,Achats et ventes
Buying Amount,Montant d&#39;achat
Buying Settings,Réglages d&#39;achat
"Buying must be checked, if Applicable For is selected as {0}","Achat doit être vérifiée, si pour Applicable est sélectionné comme {0}"
@@ -428,11 +428,11 @@ Call,Appeler
Calls,appels
Campaign,Campagne
Campaign Name,Nom de la campagne
Campaign Name is required,Maître à la clientèle .
Campaign Name is required,Le nom de la campagne est requis
Campaign Naming By,Campagne Naming par
Campaign-.####,Centre de coûts de transactions existants ne peut pas être converti en groupe
Campaign-.####,Campagne-.####
Can be approved by {0},Peut être approuvé par {0}
"Can not filter based on Account, if grouped by Account","Impossible de filtrer sur la base de compte , si regroupées par compte"
"Can not filter based on Account, if grouped by Account","Impossible de filtrer sur les compte , si regroupées par compte"
"Can not filter based on Voucher No, if grouped by Voucher","Impossible de filtrer sur la base Bon Non, si regroupés par Chèque"
Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total',Remarque : {0}
Cancel Material Visit {0} before cancelling this Customer Issue,Invalid serveur de messagerie . S'il vous plaît corriger et essayer à nouveau.
@@ -441,10 +441,10 @@ Cancelled,Annulé
Cancelling this Stock Reconciliation will nullify its effect.,Annulation de ce stock de réconciliation annuler son effet .
Cannot Cancel Opportunity as Quotation Exists,Vous ne pouvez pas annuler Possibilité de devis Existe
Cannot approve leave as you are not authorized to approve leaves on Block Dates,Vous ne pouvez pas approuver les congés que vous n'êtes pas autorisé à approuver les congés sur les dates de bloc
Cannot cancel because Employee {0} is already approved for {1},Vous ne pouvez pas annuler parce employés {0} est déjà approuvé pour {1}
Cannot cancel because Employee {0} is already approved for {1},Impossible d'annuler car l'employé {0} est déjà approuvé pour {1}
Cannot cancel because submitted Stock Entry {0} exists,Vous ne pouvez pas annuler car soumis Stock entrée {0} existe
Cannot carry forward {0},Point {0} doit être un achat article
Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved.,Vous ne pouvez pas modifier Exercice Date de départ et de l'exercice Date de fin une fois l'exercice est enregistré.
Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved.,Impossible de modifier les dates de début et de fin d'exercice une fois que l'exercice est enregistré.
"Cannot change company's default currency, because there are existing transactions. Transactions must be cancelled to change the default currency.",Voyage
Cannot convert Cost Center to ledger as it has child nodes,Vous ne pouvez pas convertir le centre de coûts à livre car il possède des nœuds enfant
Cannot covert to Group because Master Type or Account Type is selected.,Il y avait des erreurs lors de l'envoi de courriel . S'il vous plaît essayez de nouveau .
@@ -842,13 +842,13 @@ Distributor,Distributeur
Divorced,Divorcé
Do Not Contact,Ne communiquez pas avec
Do not show any symbol like $ etc next to currencies.,Ne plus afficher n&#39;importe quel symbole comme $ etc à côté de devises.
Do really want to unstop production order: ,
Do you really want to STOP ,
Do really want to unstop production order: ,Do really want to unstop production order:
Do you really want to STOP ,Do you really want to STOP
Do you really want to STOP this Material Request?,Voulez-vous vraiment arrêter cette Demande de Matériel ?
Do you really want to Submit all Salary Slip for month {0} and year {1},"Statut du document de transition {0} {1}, n'est pas autorisé"
Do you really want to UNSTOP ,
Do you really want to UNSTOP ,Do you really want to UNSTOP
Do you really want to UNSTOP this Material Request?,Voulez-vous vraiment à ce unstop Demande de Matériel ?
Do you really want to stop production order: ,
Do you really want to stop production order: ,Do you really want to stop production order:
Doc Name,Nom de Doc
Doc Type,Doc Type d&#39;
Document Description,Description du document
@@ -900,7 +900,7 @@ Electronics,électronique
Email,Email
Email Digest,Email Digest
Email Digest Settings,Paramètres de messagerie Digest
Email Digest: ,
Email Digest: ,Email Digest:
Email Id,Identification d&#39;email
"Email Id where a job applicant will email e.g. ""jobs@example.com""",Identification d&#39;email où un demandeur d&#39;emploi enverra par courriel par exemple &quot;jobs@example.com&quot;
Email Notifications,Notifications par courriel
@@ -960,7 +960,7 @@ Enter url parameter for receiver nos,Entrez le paramètre url pour nos récepteu
Entertainment & Leisure,Entertainment & Leisure
Entertainment Expenses,Frais de représentation
Entries,Entrées
Entries against ,
Entries against ,Entries against
Entries are not allowed against this Fiscal Year if the year is closed.,Les inscriptions ne sont pas autorisés contre cette exercice si l&#39;année est fermé.
Equity,Opération {0} est répété dans le tableau des opérations
Error: {0} > {1},Erreur: {0} > {1}
@@ -1575,7 +1575,7 @@ Maintenance Visit Purpose,But Visite d&#39;entretien
Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Doublons {0} avec la même {1}
Maintenance start date can not be before delivery date for Serial No {0},Entretien date de début ne peut pas être avant la date de livraison pour série n ° {0}
Major/Optional Subjects,Sujets principaux / en option
Make ,
Make ,Make
Make Accounting Entry For Every Stock Movement,Faites Entrée Comptabilité Pour chaque mouvement Stock
Make Bank Voucher,Assurez-Bon Banque
Make Credit Note,Assurez Note de crédit
@@ -2450,7 +2450,7 @@ Rounded Off,Période est trop courte
Rounded Total,Totale arrondie
Rounded Total (Company Currency),Totale arrondie (Société Monnaie)
Row # ,Row #
Row # {0}: ,
Row # {0}: ,Row # {0}:
Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master).,Ligne # {0}: quantité Commandé ne peut pas moins que l'ordre minimum quantité de produit (défini dans le maître de l'article).
Row #{0}: Please specify Serial No for Item {1},Ligne # {0}: S'il vous plaît spécifier Pas de série pour objet {1}
Row {0}: Account does not match with \ Purchase Invoice Credit To account,Ligne {0}: compte ne correspond pas à \ Facture d'achat crédit du compte
@@ -2752,7 +2752,7 @@ Stock Ageing,Stock vieillissement
Stock Analytics,Analytics stock
Stock Assets,payable
Stock Balance,Solde Stock
Stock Entries already created for Production Order ,
Stock Entries already created for Production Order ,Stock Entries already created for Production Order
Stock Entry,Entrée Stock
Stock Entry Detail,Détail d&#39;entrée Stock
Stock Expenses,Facteur de conversion de l'unité de mesure par défaut doit être de 1 à la ligne {0}
@@ -3318,7 +3318,7 @@ website page link,Lien vers page web
{0} must be reduced by {1} or you should increase overflow tolerance,{0} doit être réduite par {1} ou vous devez augmenter la tolérance de dépassement
{0} must have role 'Leave Approver',Nouveau Stock UDM est nécessaire
{0} valid serial nos for Item {1},BOM {0} pour objet {1} à la ligne {2} est inactif ou non soumis
{0} {1} against Bill {2} dated {3},S'il vous plaît entrer le titre !
{0} {1} against Bill {2} dated {3},{0} {1} contre le projet de loi en date du {2} {3}
{0} {1} against Invoice {2},investissements
{0} {1} has already been submitted,"S'il vous plaît entrer » est sous-traitée "" comme Oui ou Non"
{0} {1} has been modified. Please refresh.,Point ou Entrepôt à la ligne {0} ne correspond pas à la Demande de Matériel
1 (Half Day) (Demi-journée)
51 Accepted Quantity Quantité acceptés
52 Accepted Warehouse Entrepôt acceptable
53 Account compte Compte
54 Account Balance Solde du compte
55 Account Created: {0} Compte créé : {0}
56 Account Details Détails du compte
57 Account Head Responsable du compte
63 Account head {0} created Responsable du compte {0} a été crée
64 Account must be a balance sheet account Le compte doit être un bilan
65 Account with child nodes cannot be converted to ledger Liste des prix non sélectionné Un compte avec des enfants ne peut pas être converti en grand livre
66 Account with existing transaction can not be converted to group. {0} n'est pas un congé approbateur valide Un compte contenant une transaction ne peut pas être converti en groupe
67 Account with existing transaction can not be deleted Compte avec la transaction existante ne peut pas être supprimé Un compte contenant une transaction ne peut pas être supprimé
68 Account with existing transaction cannot be converted to ledger Compte avec la transaction existante ne peut pas être converti en livre Un compte contenant une transaction ne peut pas être converti en grand livre
69 Account {0} cannot be a Group Compte {0} ne peut pas être un groupe
70 Account {0} does not belong to Company {1} Compte {0} n'appartient pas à la société {1}
71 Account {0} does not belong to company: {1} Compte {0} n'appartient pas à l'entreprise: {1} Compte {0} n'appartient pas à la société : {1}
72 Account {0} does not exist Compte {0} n'existe pas
73 Account {0} has been entered more than once for fiscal year {1} S'il vous plaît entrer « Répétez le jour du Mois de la« valeur de champ Le compte {0} a été renseigné plus d'une fois pour l'année fiscale {1}
74 Account {0} is frozen Attention: Commande {0} existe déjà contre le même numéro de bon de commande Le compte {0} est gelé
75 Account {0} is inactive dépenses directes Le compte {0} est inactif
76 Account {0} is not valid Compte {0} n'est pas valide Le compte {0} n'est pas valide
77 Account {0} must be of type 'Fixed Asset' as Item {1} is an Asset Item Compte {0} doit être de type ' actif fixe ' comme objet {1} est un atout article
78 Account {0}: Parent account {1} can not be a ledger Compte {0}: compte de Parent {1} ne peut pas être un grand livre
79 Account {0}: Parent account {1} does not belong to company: {2} Compte {0}: compte de Parent {1} n'appartient pas à l'entreprise: {2}
80 Account {0}: Parent account {1} does not exist Compte {0}: compte de Parent {1} n'existe pas
88 Accounts Comptes
89 Accounts Browser Navigateur des comptes
90 Accounts Frozen Upto Jusqu&#39;à comptes gelés Comptes gelés jusqu'au
91 Accounts Payable Comptes à payer
92 Accounts Receivable Débiteurs
93 Accounts Settings Paramètres des comptes
94 Active Actif
95 Active: Will extract emails from Actif: va extraire des emails à partir de Actif : extraira les emails depuis
96 Activity Activité
97 Activity Log Journal d&#39;activité
98 Activity Log: Journal d'activité:
99 Activity Type Type d&#39;activité
104 Actual End Date Date de fin réelle
105 Actual Invoice Date Date de la facture réelle
106 Actual Posting Date Date réelle d&#39;affichage Date réelle d'envoie
107 Actual Qty Quantité réelle
108 Actual Qty (at source/target) Quantité réelle (à la source / cible)
109 Actual Qty After Transaction Qté réel Après Transaction
110 Actual Qty: Quantity available in the warehouse. Quantité réelle : Quantité disponible dans l'entrepôt .
112 Actual Start Date Date de début réelle
113 Add Ajouter
114 Add / Edit Taxes and Charges Ajouter / Modifier Taxes et frais Ajouter / Modifier Taxes et Charges
115 Add Child Ajouter un enfant
116 Add Serial No Ajouter Numéro de série
117 Add Taxes Ajouter impôts
118 Add Taxes and Charges Ajouter Taxes et frais Ajouter impôts et charges
119 Add or Deduct Ajouter ou déduire
120 Add rows to set annual budgets on Accounts. Ajoutez des lignes pour établir des budgets annuels sur des comptes.
121 Add to Cart Ajouter au panier
122 Add to calendar on this date Ajouter cette date au calendrier
130 Address Line 1 Adresse ligne 1
131 Address Line 2 Adresse ligne 2
132 Address Template Adresse modèle Modèle d'adresse
133 Address Title Titre de l'adresse
134 Address Title is mandatory. Vous n'êtes pas autorisé à imprimer ce document Le titre de l'adresse est obligatoire
135 Address Type Type d&#39;adresse
136 Address master. Adresse principale
137 Administrative Expenses Dépenses administratives
138 Administrative Officer de l'administration
171 All Contact Tout contact
172 All Contacts. Tous les contacts.
173 All Customer Contact Tout contact avec la clientèle Tous les contacts clients
174 All Customer Groups N ° de série {0} est sous contrat de maintenance jusqu'à {1} Tous les groupes client
175 All Day Toute la journée
176 All Employee (Active) Tous les employés (Actif)
177 All Item Groups Tous les groupes des ouvrages Tous les groupes d'article
178 All Lead (Open) Tous plomb (Ouvert) Toutes les pistes (Ouvertes)
179 All Products or Services. Tous les produits ou services.
180 All Sales Partner Contact Tout contact Sales Partner Tous les contacts des partenaires commerciaux
181 All Sales Person Tout Sales Person Tous les commerciaux
182 All Supplier Contact Toutes Contacter le fournisseur Tous les contacts fournisseur
183 All Supplier Types Tous les types de fournisseurs
184 All Territories Compte racine ne peut pas être supprimé Tous les secteurs
185 All export related fields like currency, conversion rate, export total, export grand total etc are available in Delivery Note, POS, Quotation, Sales Invoice, Sales Order etc. Tous les champs liés à l'exportation comme monnaie , taux de conversion , l'exportation totale , l'exportation totale grandiose etc sont disponibles dans la note de livraison , POS , offre , facture de vente , Sales Order etc
186 All import related fields like currency, conversion rate, import total, import grand total etc are available in Purchase Receipt, Supplier Quotation, Purchase Invoice, Purchase Order etc. Tous les champs importation connexes comme monnaie , taux de conversion , totale d'importation , importation grande etc totale sont disponibles en Achat réception , Fournisseur d'offre , facture d'achat , bon de commande , etc
187 All items have already been invoiced Tous les articles ont déjà été facturés
188 All these items have already been invoiced Existe compte de l'enfant pour ce compte . Vous ne pouvez pas supprimer ce compte . Tous les articles ont déjà été facturés
189 Allocate Allouer
190 Allocate leaves for a period. Compte temporaire ( actif)
191 Allocate leaves for the year. Allouer des feuilles de l&#39;année.
192 Allocated Amount Montant alloué
199 Allow Children permettre aux enfants
200 Allow Dropbox Access Autoriser l'accès au Dropbox
201 Allow Google Drive Access Autoriser Google Drive accès Autoriser l'accès à Google Drive
202 Allow Negative Balance Laissez solde négatif Autoriser un solde négatif
203 Allow Negative Stock Laissez Stock Négatif Autoriser un stock négatif
204 Allow Production Order Laissez un ordre de fabrication Permettre les ordres de fabrication
205 Allow User Permettre à l&#39;utilisateur
206 Allow Users Autoriser les utilisateurs
207 Allow the following users to approve Leave Applications for block days. Autoriser les utilisateurs suivants d&#39;approuver demandes d&#39;autorisation pour les jours de bloc.
208 Allow user to edit Price List Rate in transactions Permettre à l&#39;utilisateur d&#39;éditer Prix List Noter dans les transactions
211 Allowance for over-{0} crossed for Item {1}. Allocation pour les plus de {0} franchi pour objet {1}.
212 Allowed Role to Edit Entries Before Frozen Date Autorisé rôle à modifier les entrées Avant Frozen date
213 Amended From De modifiée Modifié depuis
214 Amount Montant
215 Amount (Company Currency) Montant (Société Monnaie)
216 Amount Paid Montant payé
217 Amount to Bill Montant du projet de loi
218 An Customer exists with same name Il existe un client avec le même nom
219 An Item Group exists with same name, please change the item name or rename the item group Un groupe d'objet existe avec le même nom , s'il vous plaît changer le nom de l'élément ou de renommer le groupe de l'article Un groupe d'article existe avec le même nom, changez le nom de l'article ou renommez le groupe d'article SVP
220 An item exists with same name ({0}), please change the item group name or rename the item Le compte doit être un compte de bilan Un article existe avec le même nom ({0}), changez le groupe de l'article ou renommez l'article SVP
221 Analyst analyste
222 Annual Annuel
223 Another Period Closing Entry {0} has been made after {1} Point Wise impôt Détail
224 Another Salary Structure {0} is active for employee {0}. Please make its status 'Inactive' to proceed. Le taux de conversion ne peut pas être égal à 0 ou 1
246 Appraisal Template Title Titre modèle d&#39;évaluation
247 Appraisal {0} created for Employee {1} in the given date range Soulager date doit être supérieure à date d'adhésion
248 Apprentice apprenti Apprenti
249 Approval Status Statut d&#39;approbation
250 Approval Status must be 'Approved' or 'Rejected' non autorisé Le statut d'approbation doit être 'Approuvé' ou 'Rejeté'
251 Approved Approuvé
252 Approver Approbateur
253 Approving Role Approuver rôle
254 Approving Role cannot be same as role the rule is Applicable To Vous ne pouvez pas sélectionner le type de charge comme « Sur la ligne précédente Montant » ou « Le précédent Row totale » pour la première rangée
255 Approving User Approuver l&#39;utilisateur
256 Approving User cannot be same as user the rule is Applicable To Approuver l'utilisateur ne peut pas être identique à l'utilisateur la règle est applicable aux
257 Are you sure you want to STOP Are you sure you want to STOP
258 Are you sure you want to UNSTOP Are you sure you want to UNSTOP
259 Arrear Amount Montant échu
260 As Production Order can be made for this item, it must be a stock item. Comme ordre de fabrication peut être faite de cet élément, il doit être un article en stock .
261 As per Stock UOM Selon Stock UDM
262 As there are existing stock transactions for this item, you can not change the values of 'Has Serial No', 'Is Stock Item' and 'Valuation Method' Comme il ya des transactions boursières existantes pour cet article, vous ne pouvez pas modifier les valeurs de ' A Pas de série »,« Est- Stock Item »et« Méthode d'évaluation »
265 Associate associé
266 Atleast one of the Selling or Buying must be selected Au moins un de la vente ou l'achat doit être sélectionné
267 Atleast one warehouse is mandatory Atleast un entrepôt est obligatoire Au moins un entrepôt est obligatoire
268 Attach Image suivant Joindre l'image
269 Attach Letterhead Fixez -tête Joindre l'entête
270 Attach Logo S'il vous plaît sélectionner un fichier csv valide avec les données Joindre le logo
271 Attach Your Picture Liquidation Date non mentionné Joindre votre photo
272 Attendance Présence
273 Attendance Date Date de Participation
274 Attendance Details Détails de présence
275 Attendance From Date Participation De Date
285 Auto-raise Material Request if quantity goes below re-order level in a warehouse Auto-raise Demande de Matériel si la quantité va en dessous du niveau de re-commande dans un entrepôt
286 Automatically compose message on submission of transactions. Composer automatiquement un message sur la soumission de transactions .
287 Automatically extract Job Applicants from a mail box Automatically extract Job Applicants from a mail box
288 Automatically extract Leads from a mail box e.g. Extraire automatiquement des prospects à partir d'une boîte aux lettres par exemple
289 Automatically updated via Stock Entry of type Manufacture/Repack Automatiquement mis à jour via l&#39;entrée de fabrication de type Stock / Repack
290 Automotive automobile
291 Autoreply when a new mail is received Réponse automatique lorsqu'un nouveau message est reçu
369 Billing Facturation
370 Billing Address Adresse de facturation
371 Billing Address Name Facturation Nom Adresse Nom de l'adresse de facturation
372 Billing Status Statut de la facturation
373 Bills raised by Suppliers. Factures soulevé par les fournisseurs.
374 Bills raised to Customers. Factures aux clients soulevé.
375 Bin Boîte
380 Block Days Bloquer les jours
381 Block leave applications by department. Bloquer les demandes d&#39;autorisation par le ministère.
382 Blog Post Blog Article de blog
383 Blog Subscriber Abonné Blog
384 Blood Group Groupe sanguin
385 Both Warehouse must belong to same Company Les deux Entrepôt doit appartenir à une même entreprise Les deux Entrepôt doivent appartenir à la même entreprise
386 Box boîte
387 Branch Branche
388 Brand Marque
389 Brand Name La marque
406 Business Development Manager Directeur du développement des affaires
407 Buying Achat
408 Buying & Selling Fin d'année financière Date Achats et ventes
409 Buying Amount Montant d&#39;achat
410 Buying Settings Réglages d&#39;achat
411 Buying must be checked, if Applicable For is selected as {0} Achat doit être vérifiée, si pour Applicable est sélectionné comme {0}
412 C-Form C-Form
428 Campaign Campagne
429 Campaign Name Nom de la campagne
430 Campaign Name is required Maître à la clientèle . Le nom de la campagne est requis
431 Campaign Naming By Campagne Naming par
432 Campaign-.#### Centre de coûts de transactions existants ne peut pas être converti en groupe Campagne-.####
433 Can be approved by {0} Peut être approuvé par {0}
434 Can not filter based on Account, if grouped by Account Impossible de filtrer sur la base de compte , si regroupées par compte Impossible de filtrer sur les compte , si regroupées par compte
435 Can not filter based on Voucher No, if grouped by Voucher Impossible de filtrer sur la base Bon Non, si regroupés par Chèque
436 Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total' Remarque : {0}
437 Cancel Material Visit {0} before cancelling this Customer Issue Invalid serveur de messagerie . S'il vous plaît corriger et essayer à nouveau.
438 Cancel Material Visits {0} before cancelling this Maintenance Visit S'il vous plaît créer la structure des salaires pour les employés {0}
441 Cannot Cancel Opportunity as Quotation Exists Vous ne pouvez pas annuler Possibilité de devis Existe
442 Cannot approve leave as you are not authorized to approve leaves on Block Dates Vous ne pouvez pas approuver les congés que vous n'êtes pas autorisé à approuver les congés sur les dates de bloc
443 Cannot cancel because Employee {0} is already approved for {1} Vous ne pouvez pas annuler parce employés {0} est déjà approuvé pour {1} Impossible d'annuler car l'employé {0} est déjà approuvé pour {1}
444 Cannot cancel because submitted Stock Entry {0} exists Vous ne pouvez pas annuler car soumis Stock entrée {0} existe
445 Cannot carry forward {0} Point {0} doit être un achat article
446 Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved. Vous ne pouvez pas modifier Exercice Date de départ et de l'exercice Date de fin une fois l'exercice est enregistré. Impossible de modifier les dates de début et de fin d'exercice une fois que l'exercice est enregistré.
447 Cannot change company's default currency, because there are existing transactions. Transactions must be cancelled to change the default currency. Voyage
448 Cannot convert Cost Center to ledger as it has child nodes Vous ne pouvez pas convertir le centre de coûts à livre car il possède des nœuds enfant
449 Cannot covert to Group because Master Type or Account Type is selected. Il y avait des erreurs lors de l'envoi de courriel . S'il vous plaît essayez de nouveau .
450 Cannot deactive or cancle BOM as it is linked with other BOMs Données du projet - sage n'est pas disponible d'offre
842 Do Not Contact Ne communiquez pas avec
843 Do not show any symbol like $ etc next to currencies. Ne plus afficher n&#39;importe quel symbole comme $ etc à côté de devises.
844 Do really want to unstop production order: Do really want to unstop production order:
845 Do you really want to STOP Do you really want to STOP
846 Do you really want to STOP this Material Request? Voulez-vous vraiment arrêter cette Demande de Matériel ?
847 Do you really want to Submit all Salary Slip for month {0} and year {1} Statut du document de transition {0} {1}, n'est pas autorisé
848 Do you really want to UNSTOP Do you really want to UNSTOP
849 Do you really want to UNSTOP this Material Request? Voulez-vous vraiment à ce unstop Demande de Matériel ?
850 Do you really want to stop production order: Do you really want to stop production order:
851 Doc Name Nom de Doc
852 Doc Type Doc Type d&#39;
853 Document Description Description du document
854 Document Type Type de document
900 Email Digest Email Digest
901 Email Digest Settings Paramètres de messagerie Digest
902 Email Digest: Email Digest:
903 Email Id Identification d&#39;email
904 Email Id where a job applicant will email e.g. "jobs@example.com" Identification d&#39;email où un demandeur d&#39;emploi enverra par courriel par exemple &quot;jobs@example.com&quot;
905 Email Notifications Notifications par courriel
906 Email Sent? Envoyer envoyés?
960 Entertainment Expenses Frais de représentation
961 Entries Entrées
962 Entries against Entries against
963 Entries are not allowed against this Fiscal Year if the year is closed. Les inscriptions ne sont pas autorisés contre cette exercice si l&#39;année est fermé.
964 Equity Opération {0} est répété dans le tableau des opérations
965 Error: {0} > {1} Erreur: {0} > {1}
966 Estimated Material Cost Coût des matières premières estimée
1575 Maintenance start date can not be before delivery date for Serial No {0} Entretien date de début ne peut pas être avant la date de livraison pour série n ° {0}
1576 Major/Optional Subjects Sujets principaux / en option
1577 Make Make
1578 Make Accounting Entry For Every Stock Movement Faites Entrée Comptabilité Pour chaque mouvement Stock
1579 Make Bank Voucher Assurez-Bon Banque
1580 Make Credit Note Assurez Note de crédit
1581 Make Debit Note Assurez- notes de débit
2450 Rounded Total (Company Currency) Totale arrondie (Société Monnaie)
2451 Row # Row #
2452 Row # {0}: Row # {0}:
2453 Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master). Ligne # {0}: quantité Commandé ne peut pas moins que l'ordre minimum quantité de produit (défini dans le maître de l'article).
2454 Row #{0}: Please specify Serial No for Item {1} Ligne # {0}: S'il vous plaît spécifier Pas de série pour objet {1}
2455 Row {0}: Account does not match with \ Purchase Invoice Credit To account Ligne {0}: compte ne correspond pas à \ Facture d'achat crédit du compte
2456 Row {0}: Account does not match with \ Sales Invoice Debit To account Ligne {0}: compte ne correspond pas à \ la facture de vente de débit Pour tenir compte
2752 Stock Assets payable
2753 Stock Balance Solde Stock
2754 Stock Entries already created for Production Order Stock Entries already created for Production Order
2755 Stock Entry Entrée Stock
2756 Stock Entry Detail Détail d&#39;entrée Stock
2757 Stock Expenses Facteur de conversion de l'unité de mesure par défaut doit être de 1 à la ligne {0}
2758 Stock Frozen Upto Stock Frozen Jusqu&#39;à
3318 {0} must have role 'Leave Approver' Nouveau Stock UDM est nécessaire
3319 {0} valid serial nos for Item {1} BOM {0} pour objet {1} à la ligne {2} est inactif ou non soumis
3320 {0} {1} against Bill {2} dated {3} S'il vous plaît entrer le titre ! {0} {1} contre le projet de loi en date du {2} {3}
3321 {0} {1} against Invoice {2} investissements
3322 {0} {1} has already been submitted S'il vous plaît entrer » est sous-traitée " comme Oui ou Non
3323 {0} {1} has been modified. Please refresh. Point ou Entrepôt à la ligne {0} ne correspond pas à la Demande de Matériel
3324 {0} {1} is not submitted Accepté Rejeté + Quantité doit être égale à la quantité reçue pour objet {0}

View File

@@ -254,8 +254,8 @@ Approving Role,रोल की स्वीकृति
Approving Role cannot be same as role the rule is Applicable To,रोल का अनुमोदन करने के लिए नियम लागू है भूमिका के रूप में ही नहीं हो सकता
Approving User,उपयोगकर्ता के स्वीकृति
Approving User cannot be same as user the rule is Applicable To,उपयोगकर्ता का अनुमोदन करने के लिए नियम लागू है उपयोगकर्ता के रूप में ही नहीं हो सकता
Are you sure you want to STOP ,
Are you sure you want to UNSTOP ,
Are you sure you want to STOP ,Are you sure you want to STOP
Are you sure you want to UNSTOP ,Are you sure you want to UNSTOP
Arrear Amount,बकाया राशि
"As Production Order can be made for this item, it must be a stock item.","उत्पादन का आदेश इस मद के लिए बनाया जा सकता है, यह एक शेयर मद होना चाहिए ."
As per Stock UOM,स्टॉक UOM के अनुसार
@@ -284,7 +284,7 @@ Auto Accounting For Stock Settings,शेयर सेटिंग्स के
Auto Material Request,ऑटो सामग्री अनुरोध
Auto-raise Material Request if quantity goes below re-order level in a warehouse,मात्रा एक गोदाम में फिर से आदेश के स्तर से नीचे चला जाता है तो सामग्री अनुरोध ऑटो बढ़ा
Automatically compose message on submission of transactions.,स्वचालित रूप से लेनदेन के प्रस्तुत करने पर संदेश लिखें .
Automatically extract Job Applicants from a mail box ,
Automatically extract Job Applicants from a mail box ,Automatically extract Job Applicants from a mail box
Automatically extract Leads from a mail box e.g.,स्वचालित रूप से एक मेल बॉक्स से सुराग निकालने उदा
Automatically updated via Stock Entry of type Manufacture/Repack,स्वतः प्रकार निर्माण / Repack स्टॉक प्रविष्टि के माध्यम से अद्यतन
Automotive,मोटर वाहन
@@ -511,7 +511,7 @@ Clearance Date,क्लीयरेंस तिथि
Clearance Date not mentioned,क्लीयरेंस तिथि का उल्लेख नहीं
Clearance date cannot be before check date in row {0},क्लीयरेंस तारीख पंक्ति में चेक की तारीख से पहले नहीं किया जा सकता {0}
Click on 'Make Sales Invoice' button to create a new Sales Invoice.,एक नया बिक्री चालान बनाने के लिए बटन &#39;बिक्री चालान करें&#39; पर क्लिक करें.
Click on a link to get options to expand get options ,
Click on a link to get options to expand get options ,Click on a link to get options to expand get options
Client,ग्राहक
Close Balance Sheet and book Profit or Loss.,बंद बैलेंस शीट और पुस्तक लाभ या हानि .
Closed,बंद
@@ -841,13 +841,13 @@ Distributor,वितरक
Divorced,तलाकशुदा
Do Not Contact,संपर्क नहीं है
Do not show any symbol like $ etc next to currencies.,$ मुद्राओं की बगल आदि की तरह किसी भी प्रतीक नहीं दिखा.
Do really want to unstop production order: ,
Do you really want to STOP ,
Do really want to unstop production order: ,Do really want to unstop production order:
Do you really want to STOP ,Do you really want to STOP
Do you really want to STOP this Material Request?,आप वास्तव में इस सामग्री अनुरोध बंद करना चाहते हैं ?
Do you really want to Submit all Salary Slip for month {0} and year {1},आप वास्तव में {0} और वर्ष {1} माह के लिए सभी वेतन पर्ची प्रस्तुत करना चाहते हैं
Do you really want to UNSTOP ,
Do you really want to UNSTOP ,Do you really want to UNSTOP
Do you really want to UNSTOP this Material Request?,आप वास्तव में इस सामग्री अनुरोध आगे बढ़ाना चाहते हैं?
Do you really want to stop production order: ,
Do you really want to stop production order: ,Do you really want to stop production order:
Doc Name,डॉक्टर का नाम
Doc Type,डॉक्टर के प्रकार
Document Description,दस्तावेज का विवरण
@@ -899,7 +899,7 @@ Electronics,इलेक्ट्रानिक्स
Email,ईमेल
Email Digest,ईमेल डाइजेस्ट
Email Digest Settings,ईमेल डाइजेस्ट सेटिंग
Email Digest: ,
Email Digest: ,Email Digest:
Email Id,ईमेल आईडी
"Email Id where a job applicant will email e.g. ""jobs@example.com""",ईमेल आईडी जहां एक नौकरी आवेदक जैसे &quot;jobs@example.com&quot; ईमेल करेंगे
Email Notifications,ईमेल सूचनाएं
@@ -959,7 +959,7 @@ Enter url parameter for receiver nos,रिसीवर ओपन स्कू
Entertainment & Leisure,मनोरंजन और आराम
Entertainment Expenses,मनोरंजन खर्च
Entries,प्रविष्टियां
Entries against ,
Entries against ,Entries against
Entries are not allowed against this Fiscal Year if the year is closed.,"प्रविष्टियों इस वित्त वर्ष के खिलाफ की अनुमति नहीं है, अगर साल बंद कर दिया जाता है."
Equity,इक्विटी
Error: {0} > {1},त्रुटि: {0} > {1}
@@ -1574,7 +1574,7 @@ Maintenance Visit Purpose,रखरखाव भेंट प्रयोजन
Maintenance Visit {0} must be cancelled before cancelling this Sales Order,रखरखाव भेंट {0} इस बिक्री आदेश रद्द करने से पहले रद्द कर दिया जाना चाहिए
Maintenance start date can not be before delivery date for Serial No {0},रखरखाव शुरू करने की तारीख धारावाहिक नहीं के लिए डिलीवरी की तारीख से पहले नहीं किया जा सकता {0}
Major/Optional Subjects,मेजर / वैकल्पिक विषय
Make ,
Make ,Make
Make Accounting Entry For Every Stock Movement,हर शेयर आंदोलन के लिए लेखा प्रविष्टि बनाओ
Make Bank Voucher,बैंक वाउचर
Make Credit Note,क्रेडिट नोट बनाने
@@ -1723,7 +1723,7 @@ Net Weight UOM,नेट वजन UOM
Net Weight of each Item,प्रत्येक आइटम के नेट वजन
Net pay cannot be negative,शुद्ध भुगतान नकारात्मक नहीं हो सकता
Never,कभी नहीं
New ,
New ,New
New Account,नया खाता
New Account Name,नया खाता नाम
New BOM,नई बीओएम
@@ -2449,7 +2449,7 @@ Rounded Off,गोल बंद
Rounded Total,गोल कुल
Rounded Total (Company Currency),गोल कुल (कंपनी मुद्रा)
Row # ,# पंक्ति
Row # {0}: ,
Row # {0}: ,Row # {0}:
Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master).,Row # {0}: आदेश दिया मात्रा (आइटम मास्टर में परिभाषित) मद की न्यूनतम आदेश मात्रा से कम नहीं कर सकते हैं.
Row #{0}: Please specify Serial No for Item {1},Row # {0}: आइटम के लिए धारावाहिक नहीं निर्दिष्ट करें {1}
Row {0}: Account does not match with \ Purchase Invoice Credit To account,पंक्ति {0}: \ खरीद चालान क्रेडिट खाते के साथ मेल नहीं खाता
@@ -2751,7 +2751,7 @@ Stock Ageing,स्टॉक बूढ़े
Stock Analytics,स्टॉक विश्लेषिकी
Stock Assets,शेयर एसेट्स
Stock Balance,बाकी स्टाक
Stock Entries already created for Production Order ,
Stock Entries already created for Production Order ,Stock Entries already created for Production Order
Stock Entry,स्टॉक एंट्री
Stock Entry Detail,शेयर एंट्री विस्तार
Stock Expenses,शेयर व्यय
1 (Half Day) (आधे दिन)
254 Approving Role cannot be same as role the rule is Applicable To रोल का अनुमोदन करने के लिए नियम लागू है भूमिका के रूप में ही नहीं हो सकता
255 Approving User उपयोगकर्ता के स्वीकृति
256 Approving User cannot be same as user the rule is Applicable To उपयोगकर्ता का अनुमोदन करने के लिए नियम लागू है उपयोगकर्ता के रूप में ही नहीं हो सकता
257 Are you sure you want to STOP Are you sure you want to STOP
258 Are you sure you want to UNSTOP Are you sure you want to UNSTOP
259 Arrear Amount बकाया राशि
260 As Production Order can be made for this item, it must be a stock item. उत्पादन का आदेश इस मद के लिए बनाया जा सकता है, यह एक शेयर मद होना चाहिए .
261 As per Stock UOM स्टॉक UOM के अनुसार
284 Auto Material Request ऑटो सामग्री अनुरोध
285 Auto-raise Material Request if quantity goes below re-order level in a warehouse मात्रा एक गोदाम में फिर से आदेश के स्तर से नीचे चला जाता है तो सामग्री अनुरोध ऑटो बढ़ा
286 Automatically compose message on submission of transactions. स्वचालित रूप से लेनदेन के प्रस्तुत करने पर संदेश लिखें .
287 Automatically extract Job Applicants from a mail box Automatically extract Job Applicants from a mail box
288 Automatically extract Leads from a mail box e.g. स्वचालित रूप से एक मेल बॉक्स से सुराग निकालने उदा
289 Automatically updated via Stock Entry of type Manufacture/Repack स्वतः प्रकार निर्माण / Repack स्टॉक प्रविष्टि के माध्यम से अद्यतन
290 Automotive मोटर वाहन
511 Clearance Date not mentioned क्लीयरेंस तिथि का उल्लेख नहीं
512 Clearance date cannot be before check date in row {0} क्लीयरेंस तारीख पंक्ति में चेक की तारीख से पहले नहीं किया जा सकता {0}
513 Click on 'Make Sales Invoice' button to create a new Sales Invoice. एक नया बिक्री चालान बनाने के लिए बटन &#39;बिक्री चालान करें&#39; पर क्लिक करें.
514 Click on a link to get options to expand get options Click on a link to get options to expand get options
515 Client ग्राहक
516 Close Balance Sheet and book Profit or Loss. बंद बैलेंस शीट और पुस्तक लाभ या हानि .
517 Closed बंद
841 Divorced तलाकशुदा
842 Do Not Contact संपर्क नहीं है
843 Do not show any symbol like $ etc next to currencies. $ मुद्राओं की बगल आदि की तरह किसी भी प्रतीक नहीं दिखा.
844 Do really want to unstop production order: Do really want to unstop production order:
845 Do you really want to STOP Do you really want to STOP
846 Do you really want to STOP this Material Request? आप वास्तव में इस सामग्री अनुरोध बंद करना चाहते हैं ?
847 Do you really want to Submit all Salary Slip for month {0} and year {1} आप वास्तव में {0} और वर्ष {1} माह के लिए सभी वेतन पर्ची प्रस्तुत करना चाहते हैं
848 Do you really want to UNSTOP Do you really want to UNSTOP
849 Do you really want to UNSTOP this Material Request? आप वास्तव में इस सामग्री अनुरोध आगे बढ़ाना चाहते हैं?
850 Do you really want to stop production order: Do you really want to stop production order:
851 Doc Name डॉक्टर का नाम
852 Doc Type डॉक्टर के प्रकार
853 Document Description दस्तावेज का विवरण
899 Email ईमेल
900 Email Digest ईमेल डाइजेस्ट
901 Email Digest Settings ईमेल डाइजेस्ट सेटिंग
902 Email Digest: Email Digest:
903 Email Id ईमेल आईडी
904 Email Id where a job applicant will email e.g. "jobs@example.com" ईमेल आईडी जहां एक नौकरी आवेदक जैसे &quot;jobs@example.com&quot; ईमेल करेंगे
905 Email Notifications ईमेल सूचनाएं
959 Entertainment & Leisure मनोरंजन और आराम
960 Entertainment Expenses मनोरंजन खर्च
961 Entries प्रविष्टियां
962 Entries against Entries against
963 Entries are not allowed against this Fiscal Year if the year is closed. प्रविष्टियों इस वित्त वर्ष के खिलाफ की अनुमति नहीं है, अगर साल बंद कर दिया जाता है.
964 Equity इक्विटी
965 Error: {0} > {1} त्रुटि: {0} > {1}
1574 Maintenance Visit {0} must be cancelled before cancelling this Sales Order रखरखाव भेंट {0} इस बिक्री आदेश रद्द करने से पहले रद्द कर दिया जाना चाहिए
1575 Maintenance start date can not be before delivery date for Serial No {0} रखरखाव शुरू करने की तारीख धारावाहिक नहीं के लिए डिलीवरी की तारीख से पहले नहीं किया जा सकता {0}
1576 Major/Optional Subjects मेजर / वैकल्पिक विषय
1577 Make Make
1578 Make Accounting Entry For Every Stock Movement हर शेयर आंदोलन के लिए लेखा प्रविष्टि बनाओ
1579 Make Bank Voucher बैंक वाउचर
1580 Make Credit Note क्रेडिट नोट बनाने
1723 Net Weight of each Item प्रत्येक आइटम के नेट वजन
1724 Net pay cannot be negative शुद्ध भुगतान नकारात्मक नहीं हो सकता
1725 Never कभी नहीं
1726 New New
1727 New Account नया खाता
1728 New Account Name नया खाता नाम
1729 New BOM नई बीओएम
2449 Rounded Total गोल कुल
2450 Rounded Total (Company Currency) गोल कुल (कंपनी मुद्रा)
2451 Row # # पंक्ति
2452 Row # {0}: Row # {0}:
2453 Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master). Row # {0}: आदेश दिया मात्रा (आइटम मास्टर में परिभाषित) मद की न्यूनतम आदेश मात्रा से कम नहीं कर सकते हैं.
2454 Row #{0}: Please specify Serial No for Item {1} Row # {0}: आइटम के लिए धारावाहिक नहीं निर्दिष्ट करें {1}
2455 Row {0}: Account does not match with \ Purchase Invoice Credit To account पंक्ति {0}: \ खरीद चालान क्रेडिट खाते के साथ मेल नहीं खाता
2751 Stock Analytics स्टॉक विश्लेषिकी
2752 Stock Assets शेयर एसेट्स
2753 Stock Balance बाकी स्टाक
2754 Stock Entries already created for Production Order Stock Entries already created for Production Order
2755 Stock Entry स्टॉक एंट्री
2756 Stock Entry Detail शेयर एंट्री विस्तार
2757 Stock Expenses शेयर व्यय

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