Compare commits

...

137 Commits

Author SHA1 Message Date
Nabin Hait
b77ad7c31d Merge branch 'develop' 2016-08-02 17:16:46 +05:30
Nabin Hait
cc13a9f2f6 bumped to version 7.0.17 2016-08-02 17:46:46 +06:00
Nabin Hait
97c74f9f8f Merge pull request #5925 from rohitwaghchaure/bcornwellmott-1
PPT looks at default MR type in Item to set MR type.
2016-08-02 17:15:02 +05:30
Nabin Hait
e1e6468b33 Merge pull request #5974 from nabinhait/pos_change_amount
Change amount calcualtion in POS if there is write off amount and gl entries in this scenario
2016-08-02 17:14:50 +05:30
Nabin Hait
6620e2a494 Test case fixed for pos gl entry 2016-08-02 17:14:28 +05:30
Rohit Waghchaure
08aadb853c PPT looks at default MR type in Item to set MR type. 2016-08-02 16:59:03 +05:30
Nabin Hait
3bb1a421f0 Change amount calcualtion in POS if there is write off amount and gl entries in this scenario 2016-08-02 16:41:15 +05:30
Nabin Hait
afc0bbc8ff Merge pull request #5964 from frappe/neilLasrado-patch-1-1
Fixes for patch - make_guardian.py
2016-08-02 11:30:45 +05:30
Nabin Hait
8869430a81 Merge pull request #5967 from rohitwaghchaure/minor_fix
minor fix in payment entry
2016-08-02 11:29:48 +05:30
Rohit Waghchaure
7f031d1bfd minor fix in payment entry 2016-08-02 11:07:40 +05:30
Rushabh Mehta
5b1ebc5c54 Merge pull request #5933 from shreyasp/erpnext/update-travis
[Minor] Updated the travis.yml to use latest bench installer for erpnext
2016-08-02 10:44:39 +05:30
Neil Trini Lasrado
5bb2f56b47 Update make_guardian.py 2016-08-02 00:01:00 +05:30
Nabin Hait
1e3e6865ce Merge branch 'develop' 2016-08-01 18:07:21 +05:30
Nabin Hait
94542e104c bumped to version 7.0.16 2016-08-01 18:37:20 +06:00
Nabin Hait
90bf69aa52 Merge pull request #5957 from nabinhait/guardian_patch_fix
[patch] reload guardian interest
2016-08-01 18:05:33 +05:30
Nabin Hait
3b8109780f [patch] reload guardian interest 2016-08-01 17:59:46 +05:30
Nabin Hait
f863055b91 Merge pull request #5955 from umairsy/28jul
added documentation for the new features
2016-08-01 17:53:26 +05:30
Nabin Hait
3aac12d56b Merge branch 'develop' 2016-08-01 17:48:28 +05:30
Nabin Hait
ed75667f64 bumped to version 7.0.15 2016-08-01 18:18:27 +06:00
Nabin Hait
16a0fef759 Merge pull request #5956 from nabinhait/guardian_patch_fix
[patch] fixed reload doc and permission issue in guardian patch
2016-08-01 17:47:48 +05:30
Nabin Hait
08aec855c4 [patch] fixed reload doc and permission issue in guardian patch 2016-08-01 17:46:56 +05:30
Umair Sayyed
e96b3ce725 added documentation for the new features 2016-08-01 17:42:30 +05:30
shreyas
60e9f84c8a [Minor] Updated the travis.yml to use new installer for erpnext 2016-08-01 17:40:20 +05:30
Nabin Hait
1ffa76ba5c Merge branch 'develop' 2016-08-01 17:35:02 +05:30
Nabin Hait
798f3897a3 bumped to version 7.0.14 2016-08-01 18:05:02 +06:00
Nabin Hait
e810ea3a2f Merge pull request #5954 from nabinhait/guardian_patch_fix
Run guardian patch only if student doctype exists and there is father_name column
2016-08-01 17:33:51 +05:30
Nabin Hait
29a8a93aa1 Run guardian patch only if student doctype exists and there is father_name column 2016-08-01 17:31:17 +05:30
Nabin Hait
53133dbd4d Merge branch 'develop' 2016-08-01 16:24:53 +05:30
Nabin Hait
cd339b2ecf bumped to version 7.0.13 2016-08-01 16:54:53 +06:00
Nabin Hait
c9d04ab1fc Merge pull request #5952 from nabinhait/lcv_reference
[patch] Update refdoc in Landed Cost Voucher
2016-08-01 16:23:33 +05:30
Nabin Hait
6f84026c24 Merge pull request #5951 from nabinhait/patch_fix_104
[patch] Reload RFQ and timesheet before removing customer/supplier roles
2016-08-01 16:15:47 +05:30
Rushabh Mehta
24f45af27e [fix] minor dont make lead for invalid email 2016-08-01 16:07:56 +05:30
Nabin Hait
3c364dd5b8 [patch] Update refdoc in Landed Cost Voucher 2016-08-01 15:53:36 +05:30
Rushabh Mehta
185110159e Merge pull request #5828 from neilLasrado/guardian
Added Guardian
2016-08-01 15:36:48 +05:30
Nabin Hait
5940dc1a8e [patch] Reload RFQ and timesheet before removing customer/supplier roles 2016-08-01 15:30:44 +05:30
Neil Trini Lasrado
3e78558357 Moved Intrest to HR module 2016-08-01 15:18:36 +05:30
Neil Trini Lasrado
74dbd168c2 [new Feature] Added guardian master 2016-08-01 15:08:04 +05:30
Nabin Hait
1d7bd0efb8 Merge branch 'develop' 2016-08-01 14:12:47 +05:30
Nabin Hait
de745e1df6 bumped to version 7.0.12 2016-08-01 14:42:47 +06:00
Nabin Hait
77dd190cc8 Merge pull request #5939 from rohitwaghchaure/pos_batch_no_fixes
[Fix] batch no searching in pos & minor fixes
2016-08-01 13:17:00 +05:30
Nabin Hait
ddde4bec39 Merge pull request #5932 from rohitwaghchaure/demo_records
[demo] sales and purchase returns
2016-08-01 13:11:54 +05:30
Nabin Hait
9ed1891440 Merge pull request #5931 from neilLasrado/student-log
[new feature] Added Student Log
2016-08-01 13:10:19 +05:30
Nabin Hait
dfcf55d010 Merge pull request #5948 from nabinhait/department_role
Assigned permissions for Academic User role in Department
2016-08-01 13:07:02 +05:30
Nabin Hait
66126ffc7a Merge pull request #5938 from nabinhait/salary_renaming
Delete old salary earning and deduction doctypes
2016-08-01 13:06:52 +05:30
Nabin Hait
7c52d09dc2 Merge pull request #5947 from nabinhait/patch_order_fix
Changed the order of the patch
2016-08-01 13:06:13 +05:30
Rohit Waghchaure
a88dec8775 [Fix] batch no searching in pos 2016-08-01 13:01:13 +05:30
Nabin Hait
86a477d07e Assigned permissions for Academic User role in Department 2016-08-01 12:51:04 +05:30
Nabin Hait
bc691dccba Changed the order of the patch 2016-08-01 12:36:28 +05:30
Nabin Hait
e9674f8866 Create columns for custom fields in new table Salary Detail and Component 2016-08-01 12:13:11 +05:30
Nabin Hait
84306ccc4c Salary component fixtures 2016-08-01 11:54:19 +05:30
Nabin Hait
feed313a66 Delete old salary earning and deduction doctypes 2016-08-01 11:54:19 +05:30
Rushabh Mehta
62658fde45 Merge pull request #5941 from nabinhait/link_formatter
minor fix for item and employee link formatter
2016-08-01 10:28:48 +05:30
Nabin Hait
981f6ea34e minor fix for item and employee link formatter 2016-07-31 11:44:43 +05:30
Nabin Hait
ba1c34eef3 Merge pull request #5919 from bcornwellmott/timesheet_dates
Timesheets update on date changes in Salary Slip
2016-07-29 20:31:01 +05:30
Rushabh Mehta
3e001b5fac Merge branch 'develop' 2016-07-29 18:55:48 +05:30
Rushabh Mehta
6201068f8f bumped to version 7.0.11 2016-07-29 19:25:48 +06:00
Rushabh Mehta
9421a109cf [fix] reports template 2016-07-29 18:52:00 +05:30
Rushabh Mehta
26005c25b2 [minor] fix filter for item-code 2016-07-29 18:52:00 +05:30
Rushabh Mehta
180e43585f [minor] formatter for item and employee 2016-07-29 18:52:00 +05:30
Rohit Waghchaure
05cc36a864 [demo] sales and purchase returns 2016-07-29 18:26:02 +05:30
Neil Trini Lasrado
1e5c251ce2 [new feature] Added Student Log 2016-07-29 17:05:49 +05:30
Nabin Hait
95c2ba9736 Merge pull request #5901 from bcornwellmott/fix_employee_lookup
Fix Timesheet employee query to show names
2016-07-29 16:28:18 +05:30
Nabin Hait
69e0441041 Merge pull request #5930 from KanchanChauhan/demo-data-for-leave-attendance
Demo data for Leave Allocation, Leave Application and Attendance
2016-07-29 16:20:29 +05:30
Kanchan Chauhan
db0e57cdce Demo data for Leave Allocation, Leave Application and Attendance 2016-07-29 15:59:39 +05:30
Rushabh Mehta
51a593b0b5 Merge pull request #5918 from revant/patch-1
[Docs] changed path to login
2016-07-29 07:50:55 +05:30
Revant Nandgaonkar
cc8fb1a8d6 changed path to login
frappe.templates.pages.login.login_via_google changed to frappe.www.login.login_via_google
2016-07-28 19:50:15 +05:30
Nabin Hait
1892520324 Merge branch 'develop' 2016-07-28 18:26:23 +05:30
Nabin Hait
3bf486c5c6 bumped to version 7.0.10 2016-07-28 18:56:23 +06:00
Nabin Hait
6b8024a834 Merge pull request #5909 from nabinhait/fix_113
[fix] Show supplier name field if it is different from supplier id
2016-07-28 17:52:02 +05:30
Nabin Hait
33b10a0405 Merge pull request #5908 from nabinhait/pe_precision_fix
Set difference amount in Payment Entry as per field precision
2016-07-28 17:51:57 +05:30
Nabin Hait
7bae70a993 [fix] Show supplier name field if it is different from supplier id 2016-07-28 17:19:35 +05:30
Nabin Hait
e7d0639edc Set difference amount in Payment Entry as per field precision 2016-07-28 16:56:59 +05:30
Nabin Hait
0d5e208f8c Merge branch 'develop' 2016-07-28 16:01:00 +05:30
Nabin Hait
a163299991 bumped to version 7.0.9 2016-07-28 16:31:00 +06:00
Nabin Hait
acff41ddd2 Merge pull request #5906 from nabinhait/opportunity_status_fix
Added converted status in Opportunity
2016-07-28 15:59:43 +05:30
Nabin Hait
e72ff9377a Added converted status in Opportunity 2016-07-28 15:59:20 +05:30
Nabin Hait
a948407460 Merge branch 'develop' 2016-07-28 15:46:36 +05:30
Nabin Hait
ee70f26131 bumped to version 7.0.8 2016-07-28 16:16:35 +06:00
Rushabh Mehta
142b6187b3 Merge pull request #5902 from akshay83/develop
[fix] serial no button
2016-07-28 15:05:04 +05:30
akshay
14384c2787 [fix] serial no button 2016-07-28 13:53:17 +05:30
Nabin Hait
7357902802 Merge pull request #5896 from nabinhait/fix_112
[fix] repost gle only if there is any stock account without warehouse
2016-07-27 17:34:23 +05:30
Nabin Hait
fa97b3cac7 [fix] repost gle only if there is any stock account without warehouse 2016-07-27 17:33:32 +05:30
Nabin Hait
95f53cca44 Merge pull request #5885 from nabinhait/payment_entry_fix12
[fix] Set amounts only if party and bank account exists
2016-07-27 16:45:20 +05:30
Nabin Hait
949ceb18fc Merge pull request #5894 from nabinhait/sle_fix_101
minor fix for stock ledger entry
2016-07-27 16:44:54 +05:30
Nabin Hait
7590b8fff1 minor fix for stock ledger entry 2016-07-27 16:44:26 +05:30
Rushabh Mehta
5a8b7ca7be Merge pull request #5888 from neilLasrado/develop
[Patch] Change status in Opportunity to Quotation where status is converted
2016-07-27 16:03:21 +05:30
Neil Trini Lasrado
98151ce5b2 [Patch] Change status in Opportunity to Quotation where status is converted 2016-07-27 15:58:16 +05:30
Rushabh Mehta
380dbb044f Merge pull request #5886 from neilLasrado/develop
[Fix] Fixed issues in Fee records
2016-07-27 15:32:26 +05:30
Neil Trini Lasrado
ee75d41da0 [Fix] Fixed issues in Fee records 2016-07-27 15:23:19 +05:30
Rushabh Mehta
e26a42dc7a Merge branch 'develop' 2016-07-27 15:19:58 +05:30
Rushabh Mehta
b2c9848886 bumped to version 7.0.7 2016-07-27 15:49:58 +06:00
Nabin Hait
b4bf757a15 Update fix_nonwarehouse_ledger_gl_entries_for_transactions.py 2016-07-27 15:19:12 +05:30
Rushabh Mehta
fc49c2c5f9 Merge branch 'develop' 2016-07-27 15:09:03 +05:30
Rushabh Mehta
384f0b18c0 bumped to version 7.0.6 2016-07-27 15:39:03 +06:00
Nabin Hait
2a2346422d [fix] Set amounts only if party and bank account exists 2016-07-27 13:08:00 +05:30
Rushabh Mehta
548ea777a9 Merge pull request #5883 from saurabh6790/maintenance_schedule_fix
[fix] report filter fix
2016-07-27 12:43:41 +05:30
Nabin Hait
67047fbb06 Merge branch 'rohitwaghchaure-warehouse_blank_issue_for_non_stock_account' into develop 2016-07-27 12:43:25 +05:30
Nabin Hait
10007ab4df [fix] reposting of gle where stock account not linked with warehouse 2016-07-27 12:43:02 +05:30
Nabin Hait
444bedcd20 Merge branch 'warehouse_blank_issue_for_non_stock_account' of https://github.com/rohitwaghchaure/erpnext_develop into rohitwaghchaure-warehouse_blank_issue_for_non_stock_account 2016-07-27 12:33:10 +05:30
Rushabh Mehta
2af5dfa9cc Merge pull request #5884 from saurabh6790/schools_fix
[minor][fix] rename attribute from amount to components
2016-07-27 12:23:22 +05:30
Saurabh
4bc0f7d105 [minor][fix] rename attribute from amount to components 2016-07-27 12:10:21 +05:30
Saurabh
3642f987c7 [fix] report filter fix 2016-07-27 11:42:50 +05:30
Ben Cornwell-Mott
07e5758a94 Timesheets update on date changes in Salary Slip 2016-07-26 21:00:43 -07:00
Ben Cornwell-Mott
e326ae95ef Fixed typo 2016-07-26 19:55:09 -07:00
bcornwellmott
5f59a0a00f Corrected SQL query 2016-07-28 06:56:20 -07:00
Rushabh Mehta
fd288f36ec Merge pull request #5880 from bcornwellmott/fixSalarySlip_TimeSheet_SQL
Added date filters for the Timesheet query in Salary Slip
2016-07-27 08:22:29 +05:30
Ben Cornwell-Mott
19cb34ce40 removed test variable 2016-07-26 13:48:36 -07:00
Ben Cornwell-Mott
5342ec5055 Added employee name to get_employee_list query 2016-07-26 13:47:55 -07:00
Rushabh Mehta
593d2e3146 Merge pull request #5877 from rohitwaghchaure/v7_fixes
[minor] Fixes
2016-07-26 21:21:45 +05:30
Rohit Waghchaure
c4afd63e50 [minor] Fixes 2016-07-26 20:47:42 +05:30
Rushabh Mehta
6fe4a336f1 Merge branch 'develop' 2016-07-26 18:02:38 +05:30
Rushabh Mehta
154be9b693 bumped to version 7.0.5 2016-07-26 18:32:38 +06:00
Rushabh Mehta
d46235ed83 Merge pull request #5874 from saurabh6790/maintenance_schedule_fix
[minor][fix] end date should not be less or equal to start date
2016-07-26 17:44:42 +05:30
Saurabh
17a9940f00 [minor][fix] end date should not be less or equal to start date 2016-07-26 17:18:45 +05:30
Rohit Waghchaure
4d3e8da4a2 [Fix] Set warehouse to stock account and fixed gl entries against transactions. 2016-07-26 17:09:33 +05:30
Ben Cornwell-Mott
d4d1f1b036 Added date filters for the Timesheet query in Salary Slip 2016-07-26 03:33:38 -07:00
Rushabh Mehta
9b542f303c Merge pull request #5870 from saurabh6790/fee_component_patch_fix
[fix] fee component rename patch fix
2016-07-26 15:06:56 +05:30
Saurabh
21a5658fdf [fix] fee component rename patch fix 2016-07-26 15:03:41 +05:30
Rushabh Mehta
0540d52449 Merge pull request #5868 from rohitwaghchaure/patch_issue
[Fix] Timesheet patch
2016-07-26 12:59:00 +05:30
Rohit Waghchaure
8a9daece7e [Fix] Timesheet patch 2016-07-26 12:57:05 +05:30
Rushabh Mehta
c85aa3d9c5 Merge branch 'develop' 2016-07-26 09:24:00 +05:30
Rushabh Mehta
5662ad6d96 bumped to version 7.0.4 2016-07-26 09:54:00 +06:00
Rushabh Mehta
859843687e [minor] add abbr if missing 2016-07-26 08:23:32 +05:30
Rushabh Mehta
40cf3db0b1 Merge pull request #5865 from rohitwaghchaure/v7_fixes_and_cleanup
[mionr] fixes and cleanups
2016-07-26 07:58:03 +05:30
Rohit Waghchaure
26cf01aaba [mionr] fixes and cleanups 2016-07-26 00:30:25 +05:30
Rushabh Mehta
eac602304c Merge pull request #5864 from neilLasrado/rename
[rename] Renamed Fee Amount to Fee Component
2016-07-25 18:37:09 +05:30
Neil Trini Lasrado
ce1c63f776 [rename] Renamed Fee Amount to Fee Component 2016-07-25 18:24:37 +05:30
Rushabh Mehta
95b550dd8f Merge pull request #5862 from neilLasrado/rename
Renamed sg_creation_tool_course to Student Group Creation Tool Course
2016-07-25 16:21:32 +05:30
Rushabh Mehta
bb78f1ac16 Merge pull request #5861 from neilLasrado/develop
[Fix] fixed test cases for schools
2016-07-25 16:21:18 +05:30
Neil Trini Lasrado
feea2e3dec [Doctype Rename] Renamed sg_creation_tool_course to Student Group Creation Tool Course 2016-07-25 16:13:05 +05:30
Neil Trini Lasrado
7dae3e1ed4 [Fix] fixed test cases for schools 2016-07-25 15:55:31 +05:30
Rushabh Mehta
5658fdfaed Merge branch 'develop' 2016-07-25 15:45:46 +05:30
Rushabh Mehta
1c93dd0591 bumped to version 7.0.3 2016-07-25 16:15:46 +06:00
Rushabh Mehta
c910e0c614 [translations] update icenlandic 2016-07-25 15:03:39 +05:30
Rushabh Mehta
6c3ac9587e [fix] quick entry 2016-07-25 15:03:39 +05:30
Rushabh Mehta
316f78f859 Merge pull request #5858 from bohlian/develop
[Fixed] Stopping and Re-Opening of Production Order
2016-07-25 14:24:16 +05:30
Javier Wong
5b2af6ad40 [Fixed] Stopping and Re-Opening of Production Order 2016-07-25 16:49:39 +08:00
174 changed files with 5970 additions and 1393 deletions

View File

@@ -1,4 +1,5 @@
language: python
dist: trusty
python:
- "2.7"
@@ -11,10 +12,14 @@ before_install:
- "sh -e /etc/init.d/xvfb start"
install:
- sudo apt-get purge -y mysql-common
- wget https://raw.githubusercontent.com/frappe/bench/master/install_scripts/setup_frappe.sh
- sudo bash setup_frappe.sh --skip-setup-bench --mysql-root-password travis --bench-branch develop
- sudo pip install --upgrade pip
- sudo apt-get purge -y mysql-common mysql-server mysql-client
# - wget https://raw.githubusercontent.com/frappe/bench/master/install_scripts/setup_frappe.sh
# - sudo bash setup_frappe.sh --skip-setup-bench --mysql-root-password travis --bench-branch develop
- wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py
- sudo python install.py --develop --user travis --without-bench-setup
- sudo pip install -e ~/bench
# - sudo pip install --upgrade pip
- rm $TRAVIS_BUILD_DIR/.git/shallow
- bash $TRAVIS_BUILD_DIR/travis/bench_init.sh
- cp -r $TRAVIS_BUILD_DIR/test_sites/test_site ~/frappe-bench/sites/
@@ -30,7 +35,7 @@ script:
- bench --verbose run-tests --driver Firefox
before_script:
- mysql -e 'create database test_frappe'
- mysql -u root -ptravis -e 'create database test_frappe'
- echo "USE mysql;\nCREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe';\nFLUSH PRIVILEGES;\n" | mysql -u root -ptravis
- echo "USE mysql;\nGRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost';\n" | mysql -u root -ptravis

View File

@@ -2,7 +2,7 @@
from __future__ import unicode_literals
import frappe
__version__ = '7.0.2'
__version__ = '7.0.17'
def get_default_company(user=None):
'''Get default company for user'''

View File

@@ -251,8 +251,8 @@ class PaymentEntry(AccountsController):
self.unallocated_amount = party_amount - self.total_allocated_amount
def set_difference_amount(self):
base_unallocated_amount = flt(self.unallocated_amount) * \
(self.source_exchange_rate if self.payment_type=="Receive" else self.target_exchange_rate)
base_unallocated_amount = flt(self.unallocated_amount) * (flt(self.source_exchange_rate)
if self.payment_type=="Receive" else flt(self.target_exchange_rate))
base_party_amount = flt(self.base_total_allocated_amount) + flt(base_unallocated_amount)
@@ -267,6 +267,8 @@ class PaymentEntry(AccountsController):
if d.amount:
self.difference_amount -= flt(d.amount)
self.difference_amount = flt(self.difference_amount, self.precision("difference_amount"))
def clear_unallocated_reference_document_rows(self):
self.set("references", self.get("references", {"allocated_amount": ["not in", [0, None, ""]]}))
@@ -567,10 +569,9 @@ def get_company_defaults(company):
@frappe.whitelist()
def get_reference_details(reference_doctype, reference_name, party_account_currency):
total_amount = outstanding_amount = exchange_rate = None
ref_doc = frappe.get_doc(reference_doctype, reference_name)
if reference_doctype != "Journal Entry":
ref_doc = frappe.get_doc(reference_doctype, reference_name)
if party_account_currency == ref_doc.company_currency:
total_amount = ref_doc.base_grand_total
exchange_rate = 1
@@ -672,7 +673,7 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=
pe.setup_party_account_field()
pe.set_missing_values()
if bank:
if party_account and bank:
pe.set_exchange_rate()
pe.set_amounts()
return pe

View File

@@ -47,7 +47,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-07-25 01:35:33.540019",
"modified": "2016-07-25 05:24:22.726993",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Gateway",
@@ -95,7 +95,7 @@
"write": 0
}
],
"quick_entry": 0,
"quick_entry": 1,
"read_only": 1,
"read_only_onload": 0,
"sort_field": "modified",

View File

@@ -20,7 +20,7 @@ def get_pos_data():
if pos_profile.get('name'):
pos_profile = frappe.get_doc('POS Profile', pos_profile.get('name'))
else:
frappe.msgprint('<a href="#Form/POS Profile/New POS Profile">'
frappe.msgprint('<a href="#List/POS Profile">'
+ _("Welcome to POS: Create your POS Profile") + '</a>');
update_pos_profile_data(doc, pos_profile)
@@ -115,7 +115,7 @@ def get_items(doc, pos_profile):
item.actual_qty = frappe.db.get_value('Bin', {'item_code': item.name,
'warehouse': item.default_warehouse}, 'actual_qty') or 0
item.serial_nos = get_serial_nos(item, pos_profile)
item.batch_nos = frappe.db.sql_list("""select name from `tabBatch` where expiry_date > curdate()
item.batch_nos = frappe.db.sql_list("""select name from `tabBatch` where ifnull(expiry_date, '4000-10-10') > curdate()
and item = %(item_code)s""", {'item_code': item.item_code})
item_list.append(item)

View File

@@ -87,15 +87,6 @@ class SalesInvoice(SellingController):
def before_save(self):
set_account_for_mode_of_payment(self)
def update_change_amount(self):
self.base_paid_amount = 0.0
if self.paid_amount:
self.base_paid_amount = flt(self.paid_amount * self.conversion_rate, self.precision("base_paid_amount"))
self.change_amount = self.base_change_amount = 0.0
if self.paid_amount > self.grand_total:
self.change_amount = flt(self.paid_amount - self.grand_total, self.precision("change_amount"))
self.base_change_amount = flt(self.change_amount * self.conversion_rate, self.precision("base_change_amount"))
def on_submit(self):
if not self.recurring_id:
frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype,
@@ -110,6 +101,7 @@ class SalesInvoice(SellingController):
self.update_status_updater_args()
self.update_prevdoc_status()
self.update_billing_status_in_dn()
self.clear_unallocated_mode_of_payments()
# Updating stock ledger should always be called after updating prevdoc status,
# because updating reserved qty in bin depends upon updated delivered qty in SO
@@ -296,6 +288,12 @@ class SalesInvoice(SellingController):
frappe.throw(_("Debit To account must be a Receivable account"))
self.party_account_currency = account.account_currency
def clear_unallocated_mode_of_payments(self):
self.set("payments", self.get("payments", {"amount": ["not in", [0, None, ""]]}))
frappe.db.sql("""delete from `tabSales Invoice Payment` where parent = %s
and amount = 0""", self.name)
def validate_with_previous_doc(self):
super(SalesInvoice, self).validate_with_previous_doc({
@@ -504,6 +502,7 @@ class SalesInvoice(SellingController):
gl_entries = merge_similar_entries(gl_entries)
self.make_pos_gl_entries(gl_entries)
self.make_gle_for_change(gl_entries)
self.make_write_off_gl_entry(gl_entries)
@@ -578,27 +577,24 @@ class SalesInvoice(SellingController):
def make_pos_gl_entries(self, gl_entries):
if cint(self.is_pos) and self.paid_amount:
# POS, make payment entries
gl_entries.append(
self.get_gl_dict({
"account": self.debit_to,
"party_type": "Customer",
"party": self.customer,
"against": self.cash_bank_account,
"credit": flt(self.base_paid_amount - self.base_change_amount),
"credit_in_account_currency": flt(self.base_paid_amount - self.base_change_amount) \
if self.party_account_currency==self.company_currency else flt(self.paid_amount - self.change_amount),
"against_voucher": self.return_against if cint(self.is_return) else self.name,
"against_voucher_type": self.doctype,
}, self.party_account_currency)
)
cash_account = ''
for payment_mode in self.payments:
if payment_mode.type == 'Cash':
cash_account = payment_mode.account
if payment_mode.base_amount > 0:
# POS, make payment entries
gl_entries.append(
self.get_gl_dict({
"account": self.debit_to,
"party_type": "Customer",
"party": self.customer,
"against": payment_mode.account,
"credit": payment_mode.base_amount,
"credit_in_account_currency": payment_mode.base_amount \
if self.party_account_currency==self.company_currency \
else payment_mode.amount,
"against_voucher": self.return_against if cint(self.is_return) else self.name,
"against_voucher_type": self.doctype,
}, self.party_account_currency)
)
payment_mode_account_currency = get_account_currency(payment_mode.account)
gl_entries.append(
self.get_gl_dict({
@@ -609,20 +605,44 @@ class SalesInvoice(SellingController):
if payment_mode_account_currency==self.company_currency else payment_mode.amount
}, payment_mode_account_currency)
)
if self.change_amount:
cash_account = cash_account or self.payments[0].account
cash_account_currency = get_account_currency(cash_account)
def make_gle_for_change(self, gl_entries):
if cint(self.is_pos) and self.change_amount:
cash_account = self.get_cash_account()
if cash_account:
gl_entries.append(
self.get_gl_dict({
"account": self.debit_to,
"party_type": "Customer",
"party": self.customer,
"against": cash_account,
"debit": flt(self.base_change_amount),
"debit_in_account_currency": flt(self.base_change_amount) \
if self.party_account_currency==self.company_currency else flt(self.change_amount),
"against_voucher": self.return_against if cint(self.is_return) else self.name,
"against_voucher_type": self.doctype
}, self.party_account_currency)
)
gl_entries.append(
self.get_gl_dict({
"account": cash_account,
"against": self.customer,
"credit": self.base_change_amount,
"credit_in_account_currency": self.base_change_amount \
if payment_mode_account_currency==self.company_currency else self.change_amount
}, payment_mode_account_currency)
"credit": self.base_change_amount
})
)
def get_cash_account(self):
cash_account = [d.account for d in self.payments if d.type=="Cash"]
if cash_account:
cash_account = cash_account[0]
else:
cash_account = frappe.db.get_value("Account",
filters={"company": self.company, "account_type": "Cash", "is_group": 0})
return cash_account
def make_write_off_gl_entry(self, gl_entries):
# write off entries, applicable if only pos
if self.write_off_account and self.write_off_amount:

View File

@@ -503,7 +503,8 @@ class TestSalesInvoice(unittest.TestCase):
[pos["taxes"][1]["account_head"], 0.0, 50.0],
[stock_in_hand, 0.0, abs(sle.stock_value_difference)],
[pos["items"][0]["expense_account"], abs(sle.stock_value_difference), 0.0],
[si.debit_to, 0.0, si.paid_amount],
[si.debit_to, 0.0, 300.0],
[si.debit_to, 0.0, cash_amount],
["_Test Bank - _TC", 300.0, 0.0],
["Cash - _TC", cash_amount, 0.0]
])

View File

@@ -69,13 +69,13 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
var me = this;
// navigator.onLine
this.connection_status = false;
this.page.set_indicator("Offline", "grey")
this.page.set_indicator(__("Offline"), "grey")
frappe.call({
method:"frappe.handler.ping",
callback: function(r){
if(r.message){
me.connection_status = true;
me.page.set_indicator("Online", "green")
me.page.set_indicator(__("Online"), "green")
}
}
})
@@ -278,7 +278,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
"fieldtype": "Data",
"label": "Item",
"fieldname": "pos_item",
"placeholder": "Search Item"
"placeholder": __("Search Item")
},
parent: this.wrapper.find(".search-area"),
only_input: true,
@@ -423,16 +423,16 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
if(key){
return $.grep(window.items, function(item){
if( (item.item_code.toLowerCase().match(key)) ||
(item.item_name.toLowerCase().match(key)) || (item.item_group.toLowerCase().match(key)) ){
if(in_list(item.batch_nos, me.search.$input.val())){
return me.item_batch_no[item.item_code] = me.search.$input.val()
} else if((item.item_code.toLowerCase().match(key)) ||
(item.item_name.toLowerCase().match(key)) || (item.item_group.toLowerCase().match(key))){
return true
}else if(item.barcode == me.search.$input.val()){
return item.barcode == me.search.$input.val();
} else if (in_list(Object.keys(item.serial_nos), me.search.$input.val())){
me.item_serial_no[item.item_code] = [me.search.$input.val(), item.serial_nos[me.search.$input.val()]]
return true
} else if(in_list(item.batch_nos, me.search.$input.val())){
return me.item_batch_no[item.item_code] = me.search.$input.val()
}
})
}else{

View File

@@ -1 +1 @@
{% include "erpnext/accounts/report/accounts_receivable/accounts_receivable.html" %}
{% include "accounts/report/accounts_receivable/accounts_receivable.html" %}

View File

@@ -1 +1 @@
{% include "erpnext/accounts/report/accounts_receivable/accounts_receivable.html" %}
{% include "accounts/report/accounts_receivable/accounts_receivable.html" %}

View File

@@ -1 +1 @@
{% include "erpnext/accounts/report/accounts_receivable/accounts_receivable.html" %}
{% include "accounts/report/accounts_receivable/accounts_receivable.html" %}

View File

@@ -1 +1 @@
{% include "erpnext/accounts/report/financial_statements.html" %}
{% include "accounts/report/financial_statements.html" %}

View File

@@ -1 +1 @@
{% include "erpnext/accounts/report/financial_statements.html" %}
{% include "accounts/report/financial_statements.html" %}

View File

@@ -1 +1 @@
{% include "erpnext/accounts/report/financial_statements.html" %}
{% include "accounts/report/financial_statements.html" %}

View File

@@ -87,7 +87,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
refresh: function(doc) {
this.frm.toggle_display("supplier_name",
(this.supplier_name && this.frm.doc.supplier_name!==this.frm.doc.supplier));
(this.frm.doc.supplier_name && this.frm.doc.supplier_name!==this.frm.doc.supplier));
if(this.frm.docstatus==0 &&
(this.frm.doctype==="Purchase Order" || this.frm.doctype==="Material Request")) {

View File

@@ -3,10 +3,12 @@
"allow_import": 0,
"allow_rename": 0,
"autoname": "naming_series:",
"beta": 0,
"creation": "2013-04-30 13:13:03",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"editable_grid": 1,
"fields": [
{
"allow_on_submit": 0,
@@ -16,6 +18,7 @@
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Series",
@@ -24,6 +27,7 @@
"options": "QI-",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -40,6 +44,7 @@
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_list_view": 1,
"label": "Report Date",
@@ -49,6 +54,7 @@
"oldfieldtype": "Date",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -64,6 +70,7 @@
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"length": 0,
@@ -71,6 +78,7 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -86,6 +94,7 @@
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_list_view": 1,
"label": "Inspection Type",
@@ -96,6 +105,7 @@
"options": "\nIncoming\nOutgoing\nIn Process",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -111,6 +121,7 @@
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_list_view": 0,
"label": "Purchase Receipt No",
@@ -121,6 +132,7 @@
"options": "Purchase Receipt",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -136,6 +148,7 @@
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_list_view": 0,
"label": "Delivery Note No",
@@ -146,6 +159,7 @@
"options": "Delivery Note",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -161,6 +175,7 @@
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"length": 0,
@@ -168,6 +183,7 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -183,6 +199,7 @@
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_list_view": 1,
"label": "Item Code",
@@ -193,6 +210,7 @@
"options": "Item",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -208,6 +226,7 @@
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Item Serial No",
@@ -218,6 +237,7 @@
"options": "Serial No",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -233,6 +253,7 @@
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Batch No",
@@ -243,6 +264,7 @@
"options": "Batch",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -258,6 +280,7 @@
"fieldtype": "Float",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Sample Size",
@@ -267,6 +290,7 @@
"oldfieldtype": "Currency",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -282,6 +306,7 @@
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"length": 0,
@@ -289,6 +314,7 @@
"oldfieldtype": "Column Break",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -305,6 +331,7 @@
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Item Name",
@@ -313,6 +340,7 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"report_hide": 0,
"reqd": 0,
@@ -328,6 +356,7 @@
"fieldtype": "Small Text",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_list_view": 0,
"label": "Description",
@@ -337,6 +366,7 @@
"oldfieldtype": "Small Text",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -353,6 +383,7 @@
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"length": 0,
@@ -360,6 +391,7 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -376,6 +408,7 @@
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Inspected By",
@@ -386,6 +419,7 @@
"options": "User",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -401,6 +435,7 @@
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Verified By",
@@ -410,6 +445,7 @@
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -425,6 +461,7 @@
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"length": 0,
@@ -432,6 +469,7 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -447,6 +485,7 @@
"fieldtype": "Text",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Remarks",
@@ -456,6 +495,7 @@
"oldfieldtype": "Text",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -471,6 +511,7 @@
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 1,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Amended From",
@@ -481,6 +522,7 @@
"options": "Quality Inspection",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"report_hide": 0,
"reqd": 0,
@@ -496,6 +538,7 @@
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "",
@@ -505,6 +548,7 @@
"options": "Simple",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -520,6 +564,7 @@
"fieldtype": "Button",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Get Specification Details",
@@ -528,6 +573,7 @@
"options": "get_item_specification_details",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -543,6 +589,7 @@
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Readings",
@@ -553,6 +600,7 @@
"options": "Quality Inspection Reading",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -565,13 +613,14 @@
"hide_toolbar": 0,
"icon": "icon-search",
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 1,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2015-11-16 06:29:54.786379",
"modified": "2016-07-31 11:42:40.498926",
"modified_by": "Administrator",
"module": "Buying",
"name": "Quality Inspection",
@@ -598,7 +647,10 @@
"write": 1
}
],
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"search_fields": "item_code, report_date, purchase_receipt_no, delivery_note_no"
"search_fields": "item_code, report_date, purchase_receipt_no, delivery_note_no",
"sort_order": "ASC",
"track_seen": 0
}

View File

@@ -3,12 +3,14 @@
"allow_import": 1,
"allow_rename": 1,
"autoname": "naming_series:",
"beta": 0,
"creation": "2013-01-10 16:34:11",
"custom": 0,
"description": "Supplier of Goods or Services.",
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 0,
"fields": [
{
"allow_on_submit": 0,
@@ -705,16 +707,18 @@
"icon": "icon-user",
"idx": 370,
"image_field": "image",
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-04-28 17:36:44.742525",
"modified": "2016-07-25 05:20:29.238820",
"modified_by": "Administrator",
"module": "Buying",
"name": "Supplier",
"name_case": "Title Case",
"owner": "Administrator",
"permissions": [
{
@@ -858,7 +862,7 @@
"write": 0
}
],
"quick_entry": 0,
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"search_fields": "supplier_name, supplier_type",

View File

@@ -26,6 +26,12 @@ def get_data():
"name": "Payment Entry",
"description": _("Bank/Cash transactions against party or for internal transfer")
},
{
"type": "page",
"name": "pos",
"label": _("POS"),
"description": _("Point of Sale")
},
{
"type": "report",
"name": "Accounts Receivable",

View File

@@ -11,6 +11,10 @@ def get_data():
"type": "doctype",
"name": "Student"
},
{
"type": "doctype",
"name": "Student Log"
},
{
"type": "doctype",
"name": "Student Batch"

View File

@@ -167,9 +167,7 @@ def make_return_doc(doctype, source_name, target_doc=None):
target_doc.qty = -1* source_doc.qty
if doctype == "Purchase Receipt":
target_doc.received_qty = -1* source_doc.qty
target_doc.prevdoc_doctype = source_doc.prevdoc_doctype
target_doc.prevdoc_docname = source_doc.prevdoc_docname
target_doc.prevdoc_detail_docname = source_doc.prevdoc_detail_docname
target_doc.purchase_order = source_doc.purchase_order
elif doctype == "Purchase Invoice":
target_doc.received_qty = -1* source_doc.qty
target_doc.purchase_order = source_doc.purchase_order

View File

@@ -440,33 +440,32 @@ class calculate_taxes_and_totals(object):
paid_amount = self.doc.paid_amount \
if self.doc.party_account_currency == self.doc.currency else self.doc.base_paid_amount
self.doc.outstanding_amount = 0
if total_amount_to_pay > paid_amount:
self.doc.outstanding_amount = flt(total_amount_to_pay - flt(paid_amount),
self.doc.precision("outstanding_amount"))
self.change_amount()
self.calculate_change_amount()
self.doc.outstanding_amount = flt(total_amount_to_pay - flt(paid_amount) +
flt(self.doc.change_amount), self.doc.precision("outstanding_amount"))
elif self.doc.doctype == "Purchase Invoice":
self.doc.outstanding_amount = flt(total_amount_to_pay, self.doc.precision("outstanding_amount"))
def calculate_paid_amount(self):
paid_amount = base_paid_amount = 0.0
for payment in self.doc.get('payments'):
payment.base_amount = flt(payment.amount * self.doc.conversion_rate)
paid_amount += payment.amount
base_paid_amount += payment.base_amount
if flt(payment.amount) > 0:
payment.base_amount = flt(payment.amount * self.doc.conversion_rate)
paid_amount += payment.amount
base_paid_amount += payment.base_amount
self.doc.paid_amount = flt(paid_amount, self.doc.precision("paid_amount"))
self.doc.base_paid_amount = flt(base_paid_amount, self.doc.precision("base_paid_amount"))
def change_amount(self):
change_amount = 0.0
def calculate_change_amount(self):
self.doc.change_amount = 0.0
if self.doc.paid_amount > self.doc.grand_total:
change_amount = flt(self.doc.paid_amount - self.doc.grand_total,
self.doc.precision("change_amount"))
self.doc.change_amount = flt(self.doc.paid_amount - self.doc.grand_total +
self.doc.write_off_amount, self.doc.precision("change_amount"))
self.doc.change_amount = change_amount;
self.doc.base_change_amount = flt(change_amount * self.doc.conversion_rate,
self.doc.base_change_amount = flt(self.doc.change_amount * self.doc.conversion_rate,
self.doc.precision("base_change_amount"))
def calculate_margin(self, item):

View File

@@ -10,6 +10,7 @@
"docstatus": 0,
"doctype": "DocType",
"document_type": "Document",
"editable_grid": 1,
"fields": [
{
"allow_on_submit": 0,
@@ -266,7 +267,7 @@
"no_copy": 1,
"oldfieldname": "status",
"oldfieldtype": "Select",
"options": "Open\nQuotation\nLost\nReplied\nClosed",
"options": "Open\nQuotation\nConverted\nLost\nReplied\nClosed",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
@@ -1001,7 +1002,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-06-14 15:50:55.080217",
"modified": "2016-07-28 15:58:06.614493",
"modified_by": "Administrator",
"module": "CRM",
"name": "Opportunity",

View File

@@ -3,7 +3,7 @@
from __future__ import unicode_literals
import frappe, json
from frappe.utils import cstr, cint, get_fullname
from frappe.utils import cstr, cint, get_fullname, validate_email_add
from frappe import msgprint, _
from frappe.model.mapper import get_mapped_doc
from erpnext.setup.utils import get_exchange_rate
@@ -43,7 +43,7 @@ class Opportunity(TransactionBase):
def make_new_lead_if_required(self):
"""Set lead against new opportunity"""
if not (self.lead or self.customer) and self.contact_email:
if not (self.lead or self.customer) and self.contact_email and validate_email_add(self.contact_email):
lead_name = frappe.db.get_value("Lead", {"email_id": self.contact_email})
if not lead_name:
sender_name = get_fullname(self.contact_email)
@@ -63,6 +63,7 @@ class Opportunity(TransactionBase):
"email_id": self.contact_email,
"lead_name": sender_name
})
lead.insert(ignore_permissions=True)
lead_name = lead.name

View File

@@ -32,6 +32,7 @@ def setup_data():
setup_employee()
setup_salary_structure()
setup_salary_structure_for_timesheet()
setup_leave_allocation()
setup_mode_of_payment()
setup_account_to_expense_type()
setup_user_roles()
@@ -430,3 +431,23 @@ def setup_pos_profile():
})
pos.insert()
def setup_leave_allocation():
year = now_datetime().year
for employee in frappe.get_all('Employee', fields=['name']):
leave_types = frappe.get_all("Leave Type", fields=['name', 'max_days_allowed'])
for leave_type in leave_types:
if not leave_type.max_days_allowed:
leave_type.max_days_allowed = 10
leave_allocation = frappe.get_doc({
"doctype": "Leave Allocation",
"employee": employee.name,
"from_date": "{0}-01-01".format(year),
"to_date": "{0}-12-31".format(year),
"leave_type": leave_type.name,
"new_leaves_allocated": random.randint(1, int(leave_type.max_days_allowed))
})
leave_allocation.insert()
leave_allocation.submit()
frappe.db.commit()

View File

@@ -1,15 +1,19 @@
from __future__ import unicode_literals
import frappe
import random
from frappe.utils import random_string
from frappe.utils import random_string, add_days
from erpnext.projects.doctype.timesheet.test_timesheet import make_timesheet
from erpnext.projects.doctype.timesheet.timesheet import make_salary_slip, make_sales_invoice
from frappe.utils.make_random import how_many, get_random
from erpnext.hr.doctype.expense_claim.expense_claim import get_expense_approver, make_bank_entry
from erpnext.hr.doctype.leave_application.leave_application import get_leave_balance_on, OverlapError
def work():
frappe.set_user(frappe.db.get_global('demo_hr_user'))
year, month = frappe.flags.current_date.strftime("%Y-%m").split("-")
mark_attendance()
make_leave_application()
# process payroll
if not frappe.db.get_value("Salary Slip", {"month": month, "fiscal_year": year}):
@@ -123,4 +127,53 @@ def make_sales_invoice_for_timesheet(name):
sales_invoice.calculate_taxes_and_totals()
sales_invoice.insert()
sales_invoice.submit()
frappe.db.commit()
frappe.db.commit()
def make_leave_application():
allocated_leaves = frappe.get_all("Leave Allocation", fields=['employee', 'leave_type'])
for allocated_leave in allocated_leaves:
leave_balance = get_leave_balance_on(allocated_leave.employee, allocated_leave.leave_type, frappe.flags.current_date,
consider_all_leaves_in_the_allocation_period=True)
if leave_balance != 0:
if leave_balance == 1:
to_date = frappe.flags.current_date
else:
to_date = add_days(frappe.flags.current_date, random.randint(0, leave_balance-1))
leave_application = frappe.get_doc({
"doctype": "Leave Application",
"employee": allocated_leave.employee,
"from_date": frappe.flags.current_date,
"to_date": to_date,
"leave_type": allocated_leave.leave_type,
"status": "Approved"
})
try:
leave_application.insert()
leave_application.submit()
frappe.db.commit()
except (OverlapError):
frappe.db.rollback()
def mark_attendance():
att_date = frappe.flags.current_date
for employee in frappe.get_all('Employee', fields=['name'], filters = {'status': 'Active'}):
if not frappe.db.get_value("Attendance", {"employee": employee.name, "att_date": att_date}):
attendance = frappe.get_doc({
"doctype": "Attendance",
"employee": employee.name,
"att_date": att_date
})
leave = frappe.db.sql("""select name from `tabLeave Application`
where employee = %s and %s between from_date and to_date and status = 'Approved'
and docstatus = 1""", (employee.name, att_date))
if leave:
attendance.status = "Absent"
else:
attendance.status = "Present"
attendance.save()
attendance.submit()
frappe.db.commit()

View File

@@ -7,6 +7,8 @@ import frappe, random
from frappe.desk import query_report
from erpnext.stock.stock_ledger import NegativeStockError
from erpnext.stock.doctype.serial_no.serial_no import SerialNoRequiredError, SerialNoQtyError
from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_return
from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_return
def work():
frappe.set_user(frappe.db.get_global('demo_manufacturing_user'))
@@ -15,6 +17,8 @@ def work():
make_delivery_note()
make_stock_reconciliation()
submit_draft_stock_entries()
make_sales_return_records()
make_purchase_return_records()
def make_purchase_receipt():
if random.random() < 0.6:
@@ -95,3 +99,26 @@ def submit_draft_stock_entries():
OperationsNotCompleteError):
frappe.db.rollback()
def make_sales_return_records():
for data in frappe.get_all('Delivery Note', fields=["name"], filters={"docstatus": 1}):
if random.random() < 0.2:
print "dn"
try:
dn = make_sales_return(data.name)
dn.insert()
dn.submit()
frappe.db.commit()
except Exception, e:
frappe.db.rollback()
def make_purchase_return_records():
for data in frappe.get_all('Purchase Receipt', fields=["name"], filters={"docstatus": 1}):
if random.random() < 0.2:
print "purchase"
try:
pr = make_purchase_return(data.name)
pr.insert()
pr.submit()
frappe.db.commit()
except Exception, e:
frappe.db.rollback()

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

View File

@@ -2,30 +2,33 @@ In ERPNext, you can maintain fixed asset records like Computers, Furnitures, Car
## Asset Category
To start first you should create an Asset Category, depending on the type of assets. For example, all your desktops and laptops can be part of an Asset Category named "Computers". Here, you can set default depreciation method, periodicity and depreciation related accounts, which will be applicable to all the assets under the category.
Based on the type of assets, create Asset Category. For example, all your desktops and laptops can be part of an Asset Category named "Computers". Here you can set default depreciation method, periodicity and depreciation related accounts, which will be applicable to all the assets under the category.
<img class="screenshot" alt="Asset Category" src="{{docs_base_url}}/assets/img/accounts/asset-category.png">
> **Note:** You can also set default depreciation related Accounts and Cost Centers in Company.
> **Note:** You can also set default depreciation related Accounts and Cost Centers in Company master.
## Asset
Next step will be creating the fixed asset record. Asset record is the heart of fixed asset management, all the activities like purchasing, depreciation, scrapping or sales are managed against it.
Asset master is the heart of fixed asset management feature. All the transactions related to Asset like purchasing, sales, depreciation, scrapping will be managed from the Asset master.
<img class="screenshot" alt="Asset" src="{{docs_base_url}}/assets/img/accounts/asset.png">
Explanation of the fields:
1. Asset Category: The category of assets it belongs to.
2. Is Existing Asset: Check if the asset is being carried forward from the previous Fiscal Year. The existing assets which are partially / fully depreciated can also be created/maintained for the future reference.
3. Status: The options are - Draft, Submitted, Partially Depreciated, Fully Depreciated, Sold and Scrapped.
4. Warehouse: Set the location of the asset.
5. Gross Purchase Amount: The purchase cost of the asset
6. Expected Value After Useful Life: Useful Life is the time period over in which the company expects that the asset will be productive. After that period, either the asset is scrapped or sold. In case it is sold, mention the estimated value here. This value is also known as Salvage Value, Scrap Value or Residual Value.
7. Opening Accumulated Depreciation: The accumulated depreciation amount which has already been booked for an existing asset.
8. Current Value (After Depreciation): In case you are creating record of an existing asset which has already been partially/fully depreciated, mention the currect value of the asset. In case of new asset, mention the purchase amount or leave it blank.
9. Depreciation Method: There are two options: Straight Line and Double Declining Balance.
1. Item Code: An Item for the Asset must be a non-stock item, with "Is Asset" field checked.
<img class="screenshot" alt="Asset Item" src="{{docs_base_url}}/assets/img/accounts/asset-item.png">
2. Asset Category: The category of assets it belongs to.
3. Is Existing Asset: Check if the asset is being carried forward from the previous Fiscal Year. The existing assets which are partially / fully depreciated can also be created/maintained for the future reference.
4. Status: The options are - Draft, Submitted, Partially Depreciated, Fully Depreciated, Sold and Scrapped.
5. Warehouse: Set the location of the asset.
6. Gross Purchase Amount: The purchase cost of the asset.
7. Expected Value After Useful Life: Useful Life is the time period over in which the company expects that the asset will be productive. After that period, either the asset is scrapped or sold. In case it is sold, mention the estimated value here. This value is also known as Salvage Value, Scrap Value or Residual Value.
8. Opening Accumulated Depreciation: The accumulated depreciation amount which has already been booked for an existing asset.
9. Current Value (After Depreciation): In case you are creating record of an existing asset which has already been partially/fully depreciated, mention the current value of the asset. In case of new asset, mention the purchase amount or leave it blank.
10. Depreciation Method: There are two options: Straight Line and Double Declining Balance.
- Straight Line: This method spreads the cost of the fixed asset evenly over its useful life.
- Double Declining Method: An accelerated method of depreciation, it results in higher depreciation expense in the earlier years of ownership.
10. Total Number of Depreciations: The total number of depreciations during the useful life. In case of existing assets which are partially depreciated, mention the number of pending depreciations.
@@ -52,16 +55,16 @@ For better visibility, net value of the asset on different depreciation dates ar
## Purchase an Asset
For purchasing a new asset, create and submit the asset record with all the depreciation settings. Then create a Purchase Invoice via "Make Purchase Invoice" button. On clicking the button, system will load a new Purchase Invoice form with pre-loaded items table. It will also set proper fixed asset account (defined in teh Asset Category) in the Expense Account field. You need to select Supplier and other necessary details and submit the Purchase Invoice.
For purchasing a new asset, create and submit the asset record with all the depreciation settings. Then create a Purchase Invoice via "Make Purchase Invoice" button. On clicking the button, system will load a new Purchase Invoice form with pre-loaded items table. It will also set proper fixed asset account (defined in the Asset Category) in the Expense Account field. You need to select Supplier and other necessary details and submit the Purchase Invoice.
<img class="screenshot" alt="Asset" src="{{docs_base_url}}/assets/img/accounts/asset-purchase-invoice.png">
On submission of the invoice, the "Fixed Asset Account" will be debited and payable account will be credited. It also updates purchase date, supplier and Purchase Invoice no in the Asset record.
On submission of the invoice, the "Fixed Asset Account" will be debited and payable account will be credited. It also updates purchase date, supplier and Purchase Invoice no. in the Asset master.
## Sale an Asset
To sale an asset, open the asset record and create a Sales Invoice using "Sale Asset" button. On submission of the Sales Invoice, following entries will take place:
To sale an asset, open the asset record and create a Sales Invoice by clicking on "Sale Asset". On submission of the Sales Invoice, following entries will take place:
- "Receivable Account" (Debtors) will be debited by the sales amount.
- "Fixed Asset Account" will be credited by the purchase amount of asset.

View File

@@ -1,30 +1,22 @@
# Point of Sale Invoice
Point of Sale (POS) is the place where a retail transaction is completed. It
is the point at which a customer makes a payment to the merchant in exchange
for goods or services. For retail operations, the delivery of goods, accrual
of sale and payment all happens in one event, that is usually called the
“Point of Sale”.
For retail operations, the delivery of goods, accrual of sale and payment all happens in one event, that is usually called the “Point of Sale” (POS).
You can make a Sales Invoice of type POS by checking on “Is POS”. When you
check this, you will notice that some fields get hidden and some new ones
emerge.
<iframe width="660" height="371" src="https://www.youtube.com/embed/4WkelWkbP_c" frameborder="0" allowfullscreen></iframe>
> Tip: In retail, you may not create a separate Customer record for each
customer. You can create a general Customer called “Walk-in Customer” and make
all your transactions against this Customer record.
###Offline POS
#### Setting Up POS
POS transactions are generally quick, hence should have as less dependency as possible. In ERPNext, you can create POS Invoices even when not connected to the internet.
POS Invoices created in the offline mode will be saved locally in the browser. If internet connection is lost which creating POS Invoice, you will still be able can proceed forward. Once internet connection is available again, offline invoices will be synced, and pushed onto your ERPNext account. To learn more on how POS Invoices can be created when offline, [check here.](https://frappe.io/blog/blog/erpnext-features/offline-pos-in-erpnext-7)
#### POS Profile
In ERPNext all Sales and Purchase transactions, like Sales Invoice, Quotation, Sales Order, Purchase Order etc. can be edited via the POS. There two steps to Setup POS:
1. Enable POS View via (Setup > Customize > Feature Setup)
2. Create a [POS Setting]({{docs_base_url}}/user/manual/en/setting-up/pos-setting.html) record
#### Switch to POS View
Open any sales / purchase transaction. Click on the Computer <i class="icon-desktop"></i> Icon.
#### Different sections of the POS
* Update Stock: If this is checked, Stock Ledger Entries will be made when you “Submit” this Sales Invoice thereby eliminating the need for a separate Delivery Note.
@@ -32,17 +24,22 @@ Open any sales / purchase transaction. Click on the Computer <i class="icon-desk
* Update Payment Details like your Bank / Cash Account, Paid amount etc.
* If you are writing off certain amount. For example when you receive extra cash as a result of not having exact denomination of change, check on Write off Outstanding Amount and set the Account.
### Customer
You can select one of the existing Customer from the Customer master. If Customer doesn't exist in the Customer master, enter Customer Name in the POS Invoice view itself. On creation of POS Invoice, Customer will be auto-created in the Customer master.
<img class="screenshot" alt="POS Customer" src="{{docs_base_url}}/assets/img/accounts/pos-customer.png">
### Adding an Item
At the billing counter, the retailer needs to select Items which the consumer
buys. In the POS interface you can select an Item by two methods. One, is by
clicking on the Item image and the other, is through the Barcode / Serial No.
At the billing counter, the retailer needs to select Items which the consumer buys. In the POS interface you can select an Item by two methods. One, is by clicking on the Item image and the other, is through the Barcode / Serial No.
**Select Item** \- To select a product click on the Item image and add it into the cart. A cart is an area that prepares a customer for checkout by allowing to edit product information, adjust taxes and add discounts.
**Barcode / Serial No** \- A Barcode / Serial No is an optical machine-readable representation of data relating to the object to which it is attached. Enter Barcode / Serial No in the box as shown in the image below and pause for a second, the item will be automatically added to the cart.
![POS]({{docs_base_url}}/assets/old_images/erpnext/pos-add-item.png)
<img class="screenshot" alt="POS Item" src="{{docs_base_url}}/assets/img/accounts/pos-item.png">
> Tip: To change the quantity of an Item, enter your desired quantity in the
quantity box. These are mostly used if the same Item is purchased in bulk.
@@ -52,18 +49,11 @@ in Search box.
### Removing an Item
There are two ways to remove an Item.
Set Qty as zero to remove Item from the POS invoice. There are two ways to remove an Item.
* Select an Item by clicking on the row of that Item from Item cart. Then click on “Del” button. OR
* If Item's Qty is 1, click on a minus sign to make it zero.
* Enter 0(zero) quantity of any item to delete that item.
To remove multiple Items together, select multiple rows & click on “Del”
button.
> Delete button appears only when Items are selected.
![POS]({{docs_base_url}}/assets/old_images/erpnext/pos-remove-item.png)
* Manually enter 0(zero) quantity.
### Make Payment
@@ -73,8 +63,8 @@ ready to make the Payment. Payment process is divided into 3 steps -
1. Click on “Make Payment” to get the Payment window.
2. Select your “Mode of Payment”.
3. Click on “Pay” button to Save the document.
![POS Payment]({{docs_base_url}}/assets/old_images/erpnext/pos-make-payment.png)
<img class="screenshot" alt="POS Payment" src="{{docs_base_url}}/assets/img/accounts/pos-payment.png">
Submit the document to finalise the record. After the document is submitted,
you can either print or email it directly to the customer.

View File

@@ -0,0 +1,45 @@
#Cheque Print Template
Business involves making payment to various parties like suppliers and employees. Payment can be made in various modes like cash, NEFT or cheque. If you are making a payment via cheque, you can also create a Print Format for printing Cheque from ERPNext based on the Payment Entry.
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/sample-cheque.jpg">
Using the Cheque Print Template you can generate a new Print Format based. It will be created based the cheque format provided by your bank.
####Create New
To create a new Print Format based on the specific cheques format, go to:
`Account > Tools > Cheque Printing Template > New`
In the Cheque Print Template, for each value (say Payee, Date), exact co-ordinates are provided based on where that value should be printed on a cheque. Co-ordinates are provided in centi-meter.
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/cheque-1.png">
####New Format via Scanning
To speed up creation of a new cheque printing format, you can upload scanned image of the cheque. Considering the scanned image for the cheque, system automatically updates co-ordinates for each value like party name, amount, date, amount in words etc.
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/cheque-2.png">
####New format by manual entry
You can manually provide the co-ordinate for each value based on where you want to to be printed on the cheque.
####Preview
Based on co-ordinates provided for all the values, a preview be shown as to how the values will be printed on the cheque.
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/cheque-3.png">
####New Print Format
If the preview looks promising, click on the button to create a new Print Format for printing cheque. Based on the values provided in the Cheque Print Template, the system will auto-generate an HTML script for the cheques Print Format.
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/cheque-4.png">
####Printing Cheque
New print format generated for the cheque will be visible in the Payment Entry form. After creating the payment entry, you will be able to print transaction details on the cheque.
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/cheque-5.gif">

View File

@@ -4,3 +4,4 @@ print-headings
letter-head
address-template
terms-and-conditions
cheque-print-template

View File

@@ -5,7 +5,9 @@ Social Login enables users to login to ERPNext via their Google, Facebook or Git
Checkout the following Video Tutorials to understand how to enable social logins on ERPNext
* for FaceBook - https://www.youtube.com/watch?v=zC6Q6gIfiw8
* for Google - https://www.youtube.com/watch?v=w_EAttrE9sw
* for Google - https://www.youtube.com/watch?v=w_EAttrE9sw
* for GitHub - https://www.youtube.com/watch?v=bG71DxxkVjQ
{next}
For Google the *Authorized redirect URI* is [yoursite]/api/method/frappe.www.login.login_via_google
{next}

View File

@@ -0,0 +1,8 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Branch', {
refresh: function(frm) {
}
});

View File

@@ -3,11 +3,13 @@
"allow_import": 1,
"allow_rename": 1,
"autoname": "field:branch",
"beta": 0,
"creation": "2013-01-10 16:34:13",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 0,
"fields": [
{
"allow_on_submit": 0,
@@ -17,6 +19,7 @@
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Branch",
@@ -26,6 +29,7 @@
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -38,13 +42,14 @@
"hide_toolbar": 0,
"icon": "icon-code-fork",
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2015-11-16 06:29:42.974184",
"modified": "2016-07-25 05:24:26.534086",
"modified_by": "Administrator",
"module": "HR",
"name": "Branch",
@@ -91,6 +96,8 @@
"write": 1
}
],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0
"read_only_onload": 0,
"track_seen": 0
}

View File

@@ -1,3 +0,0 @@
Type of salary deduction.
e.g. Tax paid on behalf of the employee that is deducted from the salary.

View File

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

View File

@@ -1,101 +0,0 @@
{
"allow_copy": 0,
"allow_import": 1,
"allow_rename": 1,
"autoname": "field:deduction_name",
"creation": "2013-01-22 16:50:30",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "deduction_name",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Name",
"length": 0,
"no_copy": 0,
"oldfieldname": "deduction_name",
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "description",
"fieldtype": "Small Text",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Description",
"length": 0,
"no_copy": 0,
"oldfieldname": "description",
"oldfieldtype": "Small Text",
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "300px"
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "icon-flag",
"idx": 1,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2015-11-16 06:29:44.572917",
"modified_by": "Administrator",
"module": "HR",
"name": "Deduction Type",
"owner": "Administrator",
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "HR User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
}
],
"read_only": 0,
"read_only_onload": 0
}

View File

@@ -1,10 +0,0 @@
# Copyright (c) 2015, Frappe 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 DeductionType(Document):
pass

View File

@@ -1,7 +0,0 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
test_records = frappe.get_test_records('Deduction Type')

View File

@@ -1,10 +0,0 @@
[
{
"doctype": "Deduction Type",
"deduction_name": "_Test Professional Tax"
},
{
"doctype": "Deduction Type",
"deduction_name": "_Test TDS"
}
]

View File

@@ -0,0 +1,8 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Department', {
refresh: function(frm) {
}
});

View File

@@ -3,11 +3,13 @@
"allow_import": 1,
"allow_rename": 1,
"autoname": "field:department_name",
"beta": 0,
"creation": "2013-02-05 11:48:26",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 0,
"fields": [
{
"allow_on_submit": 0,
@@ -17,6 +19,7 @@
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Department",
@@ -26,6 +29,7 @@
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -42,6 +46,7 @@
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Leave Block List",
@@ -50,6 +55,7 @@
"options": "Leave Block List",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -62,13 +68,14 @@
"hide_toolbar": 0,
"icon": "icon-sitemap",
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2015-11-16 06:29:45.172261",
"modified": "2016-08-01 12:44:43.338689",
"modified_by": "Administrator",
"module": "HR",
"name": "Department",
@@ -93,8 +100,31 @@
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Academics User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
}
],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0
"read_only_onload": 0,
"sort_order": "ASC",
"track_seen": 0
}

View File

@@ -1,3 +0,0 @@
Type of earning that is a part of the salary.
e.g. basic salary, bonus etc.

View File

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

View File

@@ -1,101 +0,0 @@
{
"allow_copy": 0,
"allow_import": 1,
"allow_rename": 1,
"autoname": "field:earning_name",
"creation": "2013-01-24 11:03:32",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "earning_name",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Name",
"length": 0,
"no_copy": 0,
"oldfieldname": "earning_name",
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "description",
"fieldtype": "Small Text",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Description",
"length": 0,
"no_copy": 0,
"oldfieldname": "description",
"oldfieldtype": "Small Text",
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "300px"
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "icon-flag",
"idx": 1,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2015-11-16 06:29:45.813984",
"modified_by": "Administrator",
"module": "HR",
"name": "Earning Type",
"owner": "Administrator",
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "HR User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
}
],
"read_only": 0,
"read_only_onload": 0
}

View File

@@ -1,10 +0,0 @@
# Copyright (c) 2015, Frappe 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 EarningType(Document):
pass

View File

@@ -1,7 +0,0 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
test_records = frappe.get_test_records('Earning Type')

View File

@@ -1,12 +0,0 @@
[
{
"doctype": "Earning Type",
"earning_name": "_Test Basic Salary",
"taxable": "Yes"
},
{
"doctype": "Earning Type",
"earning_name": "_Test Allowance",
"taxable": "Yes"
}
]

View File

@@ -0,0 +1,8 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Interest', {
refresh: function(frm) {
}
});

View File

@@ -0,0 +1,144 @@
{
"allow_copy": 0,
"allow_import": 1,
"allow_rename": 0,
"autoname": "field:interest",
"beta": 0,
"creation": "2016-07-25 07:12:33.600702",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 1,
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "interest",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Interest",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-08-01 05:47:29.479141",
"modified_by": "Administrator",
"module": "HR",
"name": "Interest",
"name_case": "",
"owner": "Administrator",
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Academics User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "HR Manager",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "HR User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Employee",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 0
}
],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_seen": 0
}

View File

@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2015, Frappe Technologies and contributors
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
class FeeAmount(Document):
class Interest(Document):
pass

View File

@@ -0,0 +1,12 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# See license.txt
from __future__ import unicode_literals
import frappe
import unittest
# test_records = frappe.get_test_records('Interest')
class TestInterest(unittest.TestCase):
pass

View File

@@ -0,0 +1,8 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Offer Term', {
refresh: function(frm) {
}
});

View File

@@ -3,11 +3,13 @@
"allow_import": 1,
"allow_rename": 0,
"autoname": "field:offer_term",
"beta": 0,
"creation": "2015-03-05 13:00:30.900471",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 0,
"fields": [
{
"allow_on_submit": 0,
@@ -17,6 +19,7 @@
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Offer Term",
@@ -25,6 +28,7 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -35,13 +39,15 @@
],
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2015-11-16 06:29:50.848215",
"modified": "2016-07-25 05:24:25.724664",
"modified_by": "Administrator",
"module": "HR",
"name": "Offer Term",
@@ -69,8 +75,10 @@
"write": 1
}
],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_field": "modified",
"sort_order": "DESC"
"sort_order": "DESC",
"track_seen": 0
}

View File

@@ -61,11 +61,10 @@ class SalarySlip(TransactionBase):
self.pull_sal_struct(ss_doc)
def set_time_sheet(self):
if self.salary_slip_based_on_timesheet and not self.get('timesheets'):
if self.salary_slip_based_on_timesheet:
self.set("timesheets", [])
timesheets = frappe.db.sql(""" select * from `tabTimesheet` where employee = %(employee)s and (status = 'Submitted' or
status = 'Billed')""", {'employee': self.employee}, as_dict=1)
timesheets = frappe.db.sql(""" select * from `tabTimesheet` where employee = %(employee)s and start_date BETWEEN %(start_date)s AND %(end_date)s and (status = 'Submitted' or
status = 'Billed')""", {'employee': self.employee, 'start_date': self.start_date, 'end_date': self.end_date}, as_dict=1)
for data in timesheets:
self.append('timesheets', {

View File

@@ -1,5 +0,0 @@
Deduction detail in parent Salary Slip.
e.g.
- Tax paid on employee's behalf

View File

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

View File

@@ -1,140 +0,0 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2013-02-22 01:27:48",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 1,
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "deduction_type",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Type",
"length": 0,
"no_copy": 0,
"oldfieldname": "d_type",
"oldfieldtype": "Data",
"options": "Deduction Type",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": "200px",
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "200px"
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "d_amount",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Default Amount",
"length": 0,
"no_copy": 0,
"oldfieldname": "d_amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "d_depends_on_lwp",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Depends on Leave Without Pay",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "deduction_amount",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Amount",
"length": 0,
"no_copy": 0,
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-07-11 03:28:07.000106",
"modified_by": "Administrator",
"module": "HR",
"name": "Salary Slip Deduction",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_order": "ASC",
"track_seen": 0
}

View File

@@ -1,10 +0,0 @@
# Copyright (c) 2015, Frappe 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 SalarySlipDeduction(Document):
pass

View File

@@ -1,6 +0,0 @@
Earning detail in parent Salary Slip.
e.g.
- Basic Salary
- Performance Bonus

View File

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

View File

@@ -1,140 +0,0 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2013-02-22 01:27:48",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 1,
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "earning_type",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Type",
"length": 0,
"no_copy": 0,
"oldfieldname": "e_type",
"oldfieldtype": "Data",
"options": "Earning Type",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": "",
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "80px"
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "e_amount",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Default Amount",
"length": 0,
"no_copy": 0,
"oldfieldname": "e_amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "e_depends_on_lwp",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Depends on Leave Without Pay",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "earning_amount",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Amount",
"length": 0,
"no_copy": 0,
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-07-11 03:28:07.074773",
"modified_by": "Administrator",
"module": "HR",
"name": "Salary Slip Earning",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_order": "ASC",
"track_seen": 0
}

View File

@@ -1,10 +0,0 @@
# Copyright (c) 2015, Frappe 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 SalarySlipEarning(Document):
pass

View File

@@ -1 +0,0 @@
Deduction details in parent Salary Structure.

View File

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

View File

@@ -1,116 +0,0 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2013-02-22 01:27:48",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 1,
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "deduction_type",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Type",
"length": 0,
"no_copy": 0,
"oldfieldname": "d_type",
"oldfieldtype": "Select",
"options": "Deduction Type",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": "200px",
"read_only": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "200px"
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "d_modified_amt",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Amount",
"length": 0,
"no_copy": 0,
"oldfieldname": "d_modified_amt",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "depend_on_lwp",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Reduce Deduction for Leave Without Pay (LWP)",
"length": 0,
"no_copy": 0,
"oldfieldname": "depend_on_lwp",
"oldfieldtype": "Check",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-07-11 03:28:07.217367",
"modified_by": "Administrator",
"module": "HR",
"name": "Salary Structure Deduction",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"track_seen": 0
}

View File

@@ -1,10 +0,0 @@
# Copyright (c) 2015, Frappe 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 SalaryStructureDeduction(Document):
pass

View File

@@ -1 +0,0 @@
Earning details in parent Salary Structure.

View File

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

View File

@@ -1,116 +0,0 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2013-02-22 01:27:48",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"editable_grid": 1,
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "earning_type",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Type",
"length": 0,
"no_copy": 0,
"oldfieldname": "e_type",
"oldfieldtype": "Data",
"options": "Earning Type",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": "200px",
"read_only": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "200px"
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "modified_value",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Amount",
"length": 0,
"no_copy": 0,
"oldfieldname": "modified_value",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "depend_on_lwp",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Reduce Earning for Leave Without Pay (LWP)",
"length": 0,
"no_copy": 0,
"oldfieldname": "depend_on_lwp",
"oldfieldtype": "Check",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-07-11 03:28:07.283082",
"modified_by": "Administrator",
"module": "HR",
"name": "Salary Structure Earning",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_order": "ASC",
"track_seen": 0
}

View File

@@ -1,10 +0,0 @@
# Copyright (c) 2015, Frappe 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 SalaryStructureEarning(Document):
pass

View File

@@ -58,7 +58,7 @@ class MaintenanceSchedule(TransactionBase):
if no_email_sp:
frappe.msgprint(
frappe._("Setting Events to {0}, since the Employee attached to the below Sales Persons does not have a User ID{1}").format(
doc.owner, "<br>"+no_email_sp.join("<br>")
self.owner, "<br>"+no_email_sp.join("<br>")
))
scheduled_date = frappe.db.sql("""select scheduled_date from
@@ -153,7 +153,7 @@ class MaintenanceSchedule(TransactionBase):
elif not d.sales_person:
throw(_("Please select Incharge Person's name"))
if getdate(d.start_date) > getdate(d.end_date):
if getdate(d.start_date) >= getdate(d.end_date):
throw(_("Start date should be less than end date for Item {0}").format(d.item_code))
def validate_sales_order(self):

View File

@@ -98,7 +98,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-07-08 08:42:35.126397",
"modified": "2016-07-25 05:24:23.398894",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "Operation",
@@ -146,7 +146,7 @@
"write": 1
}
],
"quick_entry": 0,
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_field": "modified",

View File

@@ -112,8 +112,10 @@ class ProductionOrder(Document):
def update_status(self, status=None):
'''Update status of production order'''
status = self.get_status()
'''Update status of production order if unknown'''
if not status:
status = self.get_status()
if status != self.status:
self.db_set("status", status)
@@ -538,7 +540,7 @@ def make_new_timesheet(source_name, target_doc=None):
po = frappe.get_doc('Production Order', source_name)
ts = po.make_time_logs(open_new=True)
if not ts.get('time_logs'):
if not ts or not ts.get('time_logs'):
frappe.throw(_("Already completed"))
return ts

View File

@@ -451,10 +451,8 @@ class ProductionPlanningTool(Document):
"company": self.company,
"requested_by": frappe.session.user
})
if item_wrapper.default_bom:
material_request.update({"material_request_type": "Manufacture"})
else:
material_request.update({"material_request_type": "Purchase"})
material_request.update({"material_request_type": item_wrapper.default_material_request_type})
for sales_order, requested_qty in items_to_be_requested[item].items():
material_request.append("items", {
"doctype": "Material Request Item",

View File

@@ -264,7 +264,6 @@ execute:frappe.delete_doc_if_exists("Web Form", "contact") #2016-03-10
erpnext.patches.v6_20x.remove_fiscal_year_from_holiday_list
erpnext.patches.v6_24.map_customer_address_to_shipping_address_on_po
erpnext.patches.v6_27.fix_recurring_order_status
erpnext.patches.v6_20x.remove_customer_supplier_roles
erpnext.patches.v6_20x.update_product_bundle_description
erpnext.patches.v7_0.update_party_status
erpnext.patches.v7_0.update_item_projected
@@ -279,7 +278,7 @@ execute:frappe.rename_doc("DocType", "Payments", "Sales Invoice Payment", force=
erpnext.patches.v7_0.update_mins_to_first_response
erpnext.patches.v6_20x.repost_valuation_rate_for_negative_inventory
erpnext.patches.v7_0.system_settings_setup_complete
erpnext.patches.v7_0.set_naming_series_for_timesheet
erpnext.patches.v7_0.set_naming_series_for_timesheet #2016-07-27
execute:frappe.reload_doc('projects', 'doctype', 'project')
execute:frappe.reload_doc('projects', 'doctype', 'project_user')
erpnext.patches.v7_0.convert_timelogbatch_to_timesheet
@@ -300,4 +299,12 @@ execute:frappe.delete_doc_if_exists("DocType", "Payment Tool")
execute:frappe.delete_doc_if_exists("DocType", "Payment Tool Detail")
erpnext.patches.v7_0.setup_account_table_for_expense_claim_type_if_exists
erpnext.patches.v7_0.migrate_schools_to_erpnext
erpnext.patches.v6_20x.remove_customer_supplier_roles
erpnext.patches.v7_0.remove_administrator_role_in_doctypes
erpnext.patches.v7_0.rename_fee_amount_to_fee_component
erpnext.patches.v7_0.calculate_total_costing_amount
erpnext.patches.v7_0.fix_nonwarehouse_ledger_gl_entries_for_transactions
erpnext.patches.v7_0.remove_old_earning_deduction_doctypes
erpnext.patches.v7_0.make_guardian
erpnext.patches.v7_0.update_refdoc_in_landed_cost_voucher
execute:frappe.db.sql("update `tabItem` set default_material_request_type= case when default_bom is not null then 'Manufacture' else 'Purchase' end")

View File

@@ -2,6 +2,11 @@ from __future__ import unicode_literals
import frappe
def execute():
frappe.reload_doc("buying", "doctype", "request_for_quotation_supplier")
frappe.reload_doc("buying", "doctype", "request_for_quotation_item")
frappe.reload_doc("buying", "doctype", "request_for_quotation")
frappe.reload_doc("projects", "doctype", "timesheet")
for role in ('Customer', 'Supplier'):
frappe.db.sql('''delete from `tabUserRole`
where role=%s and parent in ("Administrator", "Guest")''', role)

View File

@@ -0,0 +1,16 @@
import frappe
from frappe.utils import flt
def execute():
frappe.reload_doc('projects', 'doctype', 'timesheet')
for data in frappe.get_all('Timesheet', fields=["name, total_costing_amount"],
filters = [["docstatus", "<", "2"]]):
if flt(data.total_costing_amount) == 0.0:
ts = frappe.get_doc('Timesheet', data.name)
ts.update_cost()
ts.calculate_total_amounts()
ts.flags.ignore_validate = True
ts.flags.ignore_mandatory = True
ts.flags.ignore_validate_update_after_submit = True
ts.save()

View File

@@ -0,0 +1,52 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
def execute():
if not frappe.db.get_single_value("Accounts Settings", "auto_accounting_for_stock"):
return
frappe.reload_doctype("Account")
warehouses = frappe.db.sql_list("""select name from tabAccount
where account_type = 'Stock' and is_group = 0
and (warehouse is null or warehouse = '')""")
if warehouses:
warehouses = set_warehouse_for_stock_account(warehouses)
if not warehouses:
return
stock_vouchers = frappe.db.sql("""select distinct sle.voucher_type, sle.voucher_no
from `tabStock Ledger Entry` sle
where sle.warehouse in (%s) and creation > '2016-05-01'
and not exists(select name from `tabGL Entry`
where account=sle.warehouse and voucher_type=sle.voucher_type and voucher_no=sle.voucher_no)
order by sle.posting_date""" %
', '.join(['%s']*len(warehouses)), tuple(warehouses))
rejected = []
for voucher_type, voucher_no in stock_vouchers:
try:
frappe.db.sql("""delete from `tabGL Entry`
where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
voucher = frappe.get_doc(voucher_type, voucher_no)
voucher.make_gl_entries()
frappe.db.commit()
except Exception, e:
print frappe.get_traceback()
rejected.append([voucher_type, voucher_no])
frappe.db.rollback()
print rejected
def set_warehouse_for_stock_account(warehouse_account):
for account in warehouse_account:
if frappe.db.exists('Warehouse', account):
frappe.db.set_value("Account", account, "warehouse", account)
else:
warehouse_account.remove(account)
return warehouse_account

View File

@@ -0,0 +1,25 @@
from __future__ import unicode_literals
import frappe
def execute():
if frappe.db.exists("DocType", "Student") and "father_name" in frappe.db.get_table_columns("Student"):
frappe.reload_doc("schools", "doctype", "student")
frappe.reload_doc("schools", "doctype", "guardian")
frappe.reload_doc("schools", "doctype", "guardian_interest")
frappe.reload_doc("hr", "doctype", "interest")
students = frappe.get_all("Student", fields=["name", "father_name", "father_email_id",
"mother_name", "mother_email_id"])
for stud in students:
if stud.father_name:
make_guardian(stud.father_name, stud.name, stud.father_email_id)
if stud.mother_name:
make_guardian(stud.mother_name, stud.name, stud.mother_email_id)
def make_guardian(name, student, email=None):
frappe.get_doc({
'doctype': 'Guardian',
'guardian_name': name,
'email': email,
'student': student
}).insert()

View File

@@ -0,0 +1,16 @@
# 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():
if frappe.db.exists("DocType", "Salary Component"):
for dt in ("Salary Structure Earning", "Salary Structure Deduction", "Salary Slip Earning",
"Salary Slip Deduction", "Earning Type", "Deduction Type"):
frappe.delete_doc("DocType", dt)
for d in frappe.db.sql("""select name from `tabCustom Field`
where dt in ('Salary Detail', 'Salary Component')"""):
frappe.get_doc("Custom Field", d[0]).save()

View File

@@ -0,0 +1,16 @@
# 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.utils.rename_field import rename_field
def execute():
if frappe.db.exists("DocType", "Fee Amount"):
frappe.rename_doc("DocType", "Fee Amount", "Fee Component")
for dt in ("Fees", "Fee Structure"):
frappe.reload_doctype(dt)
rename_field(dt, "amount", "components")

View File

@@ -0,0 +1,15 @@
from __future__ import unicode_literals
import frappe
def execute():
if "purchase_receipt" not in frappe.db.get_table_columns("Landed Cost Purchase Receipt"):
return
frappe.reload_doctype("Landed Cost Purchase Receipt")
frappe.db.sql("""
update `tabLanded Cost Purchase Receipt`
set receipt_document_type = 'Purchase Receipt', receipt_document = purchase_receipt
where (receipt_document is null or receipt_document = '')
and (purchase_receipt is not null and purchase_receipt != '')
""")

View File

@@ -15,7 +15,7 @@ frappe.ui.form.on('Homepage Featured Product', {
method: 'frappe.client.get_value',
args: {
'doctype': 'Item',
'filters': featured_product.item_code,
'filters': {'name': featured_product.item_code},
'fieldname': [
'item_name',
'web_long_description',

View File

@@ -3,11 +3,13 @@
"allow_import": 1,
"allow_rename": 1,
"autoname": "field:activity_type",
"beta": 0,
"creation": "2013-03-05 10:14:59",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 0,
"fields": [
{
"allow_on_submit": 0,
@@ -17,6 +19,7 @@
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Activity Type",
@@ -24,6 +27,7 @@
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -39,6 +43,7 @@
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Default Costing Rate",
@@ -47,6 +52,7 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -62,6 +68,7 @@
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"length": 0,
@@ -69,6 +76,7 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -84,6 +92,7 @@
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Default Billing Rate",
@@ -92,6 +101,7 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -104,13 +114,14 @@
"hide_toolbar": 0,
"icon": "icon-flag",
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2015-11-16 06:29:41.673241",
"modified": "2016-07-25 05:24:26.717981",
"modified_by": "Administrator",
"module": "Projects",
"name": "Activity Type",
@@ -157,6 +168,8 @@
"write": 1
}
],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0
"read_only_onload": 0,
"track_seen": 0
}

View File

@@ -5,11 +5,11 @@ cur_frm.add_fetch('employee', 'employee_name', 'employee_name');
frappe.ui.form.on("Timesheet", {
setup: function(frm) {
frm.get_field('time_logs').grid.editable_fields = [
{fieldname: 'billable', columns: 2},
{fieldname: 'billable', columns: 1},
{fieldname: 'activity_type', columns: 2},
{fieldname: 'from_time', columns: 2},
{fieldname: 'hours', columns: 2},
{fieldname: 'to_time', columns: 2},
{fieldname: 'from_time', columns: 3},
{fieldname: 'hours', columns: 1},
{fieldname: 'project', columns: 3}
];
frm.fields_dict.employee.get_query = function() {
@@ -22,7 +22,8 @@ frappe.ui.form.on("Timesheet", {
child = locals[cdt][cdn];
return{
filters: {
'project': child.project
'project': child.project,
'status': ["!=", "Closed"]
}
}
}
@@ -30,15 +31,13 @@ frappe.ui.form.on("Timesheet", {
onload: function(frm){
if (frm.doc.__islocal && frm.doc.time_logs) {
frm.set_value("employee", "")
calculate_time_and_amount(frm);
}
},
refresh: function(frm) {
if(frm.doc.docstatus==1) {
if(!frm.doc.sales_invoice && frm.doc.total_billing_amount > 0
&& !frm.doc.production_order){
if(!frm.doc.sales_invoice && frm.doc.total_billing_amount > 0){
frm.add_custom_button(__("Make Sales Invoice"), function() { frm.trigger("make_invoice") },
"icon-file-alt");
}
@@ -147,13 +146,16 @@ var calculate_time_and_amount = function(frm) {
var tl = frm.doc.time_logs || [];
total_hr = 0;
total_billing_amount = 0;
total_costing_amount = 0;
for(var i=0; i<tl.length; i++) {
if (tl[i].hours) {
total_hr += tl[i].hours;
total_billing_amount += tl[i].billing_amount;
total_costing_amount += tl[i].costing_amount;
}
}
cur_frm.set_value("total_hours", total_hr);
cur_frm.set_value("total_billing_amount", total_billing_amount);
cur_frm.set_value("total_costing_amount", total_costing_amount);
}

View File

@@ -157,7 +157,7 @@
"no_copy": 1,
"options": "Draft\nSubmitted\nBilled\nPayslip\nCompleted\nCancelled",
"permlevel": 0,
"print_hide": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"report_hide": 0,
@@ -478,7 +478,7 @@
"bold": 0,
"collapsible": 0,
"default": "0",
"description": "updated via Time Logs",
"description": "",
"fieldname": "total_hours",
"fieldtype": "Float",
"hidden": 0,
@@ -529,7 +529,7 @@
"collapsible": 0,
"default": "0",
"depends_on": "",
"description": "updated via Time Logs",
"description": "",
"fieldname": "total_billing_amount",
"fieldtype": "Float",
"hidden": 0,
@@ -551,6 +551,31 @@
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "total_costing_amount",
"fieldtype": "Float",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Total Costing Amount",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
@@ -637,7 +662,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-07-13 23:44:05.086570",
"modified": "2016-07-26 00:01:56.055046",
"modified_by": "Administrator",
"module": "Projects",
"name": "Timesheet",

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