Compare commits

...

100 Commits

Author SHA1 Message Date
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
130 changed files with 5121 additions and 1079 deletions

View File

@@ -2,7 +2,7 @@
from __future__ import unicode_literals
import frappe
__version__ = '7.0.2'
__version__ = '7.0.12'
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, ""]]}))
@@ -672,7 +674,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

@@ -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

@@ -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

@@ -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

@@ -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()

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('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)

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,9 @@ 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

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,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

@@ -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",

View File

@@ -20,14 +20,21 @@ class OverProductionLoggedError(frappe.ValidationError): pass
class Timesheet(Document):
def validate(self):
self.set_status()
self.total_hours = 0.0
self.total_billing_amount = 0.0
self.validate_dates()
self.validate_time_logs()
self.update_cost()
self.calculate_total_amounts()
def calculate_total_amounts(self):
self.total_hours = 0.0
self.total_billing_amount = 0.0
self.total_costing_amount = 0.0
for d in self.get("time_logs"):
self.total_hours += flt(d.hours)
if d.billable: self.total_billing_amount += flt(d.billing_amount)
if d.billable:
self.total_billing_amount += flt(d.billing_amount)
self.total_costing_amount += flt(d.costing_amount)
def set_status(self):
self.status = {
@@ -88,7 +95,7 @@ class Timesheet(Document):
frappe.throw(_("Row {0}: Completed Qty must be greater than zero.").format(data.idx))
if self.production_order and flt(pending_qty) < flt(data.completed_qty):
frappe.throw(_("Row {0}: Completed Qty cannot be more than {0} for operation {1}").format(data.idx, pending_qty, self.operation),
frappe.throw(_("Row {0}: Completed Qty cannot be more than {1} for operation {2}").format(data.idx, pending_qty, data.operation),
OverProductionLoggedError)
def update_production_order(self, time_sheet):
@@ -220,7 +227,7 @@ class Timesheet(Document):
def update_cost(self):
for data in self.time_logs:
if data.activity_type and not data.billing_amount:
if data.activity_type and (not data.billing_amount or not data.costing_amount):
rate = get_activity_cost(self.employee, data.activity_type)
hours = data.hours or 0
if rate:
@@ -286,7 +293,7 @@ def get_activity_cost(employee=None, activity_type=None):
@frappe.whitelist()
def get_employee_list(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql("""select distinct(employee) as employee
return frappe.db.sql("""select distinct employee, employee_name
from `tabSalary Structure` where salary_slip_based_on_timesheet=1
and employee like %(txt)s limit %(start)s, %(page_len)s""",
{'txt': "%%%s%%"%(txt), 'start': start, 'page_len': page_len})
and employee like %(txt)s or employee_name like %(txt)s limit %(start)s, %(page_len)s""",
{'txt': "%%%s%%"% txt, 'start': start, 'page_len': page_len})

View File

@@ -14,7 +14,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"depends_on": "eval:!parent.production_order",
"depends_on": "",
"fieldname": "billable",
"fieldtype": "Check",
"hidden": 0,
@@ -27,7 +27,7 @@
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
@@ -163,7 +163,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"depends_on": "eval:!parent.production_order",
"depends_on": "billable",
"fieldname": "section_break_11",
"fieldtype": "Section Break",
"hidden": 0,
@@ -265,7 +265,7 @@
"collapsible": 0,
"default": "0",
"depends_on": "",
"description": "To display value check Billable",
"description": "",
"fieldname": "billing_amount",
"fieldtype": "Currency",
"hidden": 0,
@@ -292,7 +292,7 @@
"bold": 0,
"collapsible": 0,
"default": "0",
"description": "To display value check Billable",
"description": "",
"fieldname": "costing_amount",
"fieldtype": "Currency",
"hidden": 0,
@@ -532,7 +532,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-07-21 09:59:01.622745",
"modified": "2016-07-26 00:07:58.267131",
"modified_by": "Administrator",
"module": "Projects",
"name": "Timesheet Detail",

View File

@@ -582,7 +582,7 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
set_default_payment: function(total_amount_to_pay, update_paid_amount){
var me = this;
payment_status = true;
if(this.frm.doc.is_pos && (!this.frm.doc.paid_amount || update_paid_amount===undefined || update_paid_amount)){
if(this.frm.doc.is_pos && (update_paid_amount===undefined || update_paid_amount)){
$.each(this.frm.doc['payments'] || [], function(index, data){
if(data.type == "Cash" && payment_status) {
data.amount = total_amount_to_pay;

View File

@@ -57,6 +57,13 @@ erpnext.payments = erpnext.stock.StockController.extend({
currency: me.frm.doc.currency,
type: data.type
})).appendTo(multimode_payments)
if (data.type == 'Cash' && data.amount == me.frm.doc.paid_amount) {
me.idx = data.idx;
me.selected_mode = $(me.$body).find(repl("input[idx='%(idx)s']",{'idx': me.idx}));
me.highlight_selected_row();
me.bind_amount_change_event();
}
})
}else{
$("<p>No payment mode selected in pos profile</p>").appendTo(multimode_payments)
@@ -90,8 +97,10 @@ erpnext.payments = erpnext.stock.StockController.extend({
bind_payment_mode_keys_event: function(){
var me = this;
$(this.$body).find('.pos-payment-row').click(function(){
me.idx = $(this).attr("idx");
me.set_outstanding_amount()
if(me.frm.doc.outstanding_amount > 0){
me.idx = $(this).attr("idx");
me.set_outstanding_amount()
}
})
},
@@ -124,12 +133,16 @@ erpnext.payments = erpnext.stock.StockController.extend({
bind_amount_change_event: function(){
var me = this;
me.selected_mode.change(function(){
this.selected_mode.change(function(){
me.payment_val = flt($(this).val()) || 0.0;
me.selected_mode.val(format_number(me.payment_val, 2))
me.idx = me.selected_mode.attr("idx")
me.update_paid_amount()
})
this.selected_mode.click(function(){
me.selected_mode.select();
})
},
clear_amount: function(){
@@ -140,6 +153,7 @@ erpnext.payments = erpnext.stock.StockController.extend({
me.selected_mode = $(me.$body).find(repl("input[idx='%(idx)s']",{'idx': me.idx}));
me.payment_val = 0.0;
me.selected_mode.val(0.0);
me.highlight_selected_row();
me.update_paid_amount();
})
},

View File

@@ -33,13 +33,13 @@ $.extend(erpnext, {
setup_serial_no: function() {
var grid_row = cur_frm.open_grid_row();
if(!grid_row || !grid_row.fields_dict.serial_no ||
grid_row.fields_dict.serial_no.get_status()!=="Write") return;
if(!grid_row || !grid_row.grid_form.fields_dict.serial_no ||
grid_row.grid_form.fields_dict.serial_no.get_status()!=="Write") return;
var $btn = $('<button class="btn btn-sm btn-default">'+__("Add Serial No")+'</button>')
.appendTo($("<div>")
.css({"margin-bottom": "10px", "margin-top": "10px"})
.appendTo(grid_row.fields_dict.serial_no.$wrapper));
.appendTo(grid_row.grid_form.fields_dict.serial_no.$wrapper));
$btn.on("click", function() {
var d = new frappe.ui.Dialog({
@@ -69,7 +69,7 @@ $.extend(erpnext, {
var serial_no = d.get_value("serial_no");
if(serial_no) {
var val = (grid_row.doc.serial_no || "").split("\n").concat([serial_no]).join("\n");
grid_row.fields_dict.serial_no.set_model_value(val.trim());
grid_row.grid_form.fields_dict.serial_no.set_model_value(val.trim());
}
d.hide();
return false;
@@ -179,6 +179,22 @@ erpnext.utils.map_current_doc = function(opts) {
}
}
frappe.form.link_formatters['Item'] = function(value, doc) {
if(doc && doc.item_name && doc.item_name !== value) {
return value + ': ' + doc.item_name;
} else {
return value;
}
}
frappe.form.link_formatters['Employee'] = function(value, doc) {
if(doc && doc.employee_name && doc.employee_name !== value) {
return value + ': ' + doc.employee_name;
} else {
return value;
}
}
// add description on posting time
$(document).on('app_ready', function() {
if(!frappe.datetime.is_timezone_same()) {
@@ -190,4 +206,4 @@ $(document).on('app_ready', function() {
});
});
}
});
});

View File

@@ -45,6 +45,7 @@ erpnext.utils.get_party_details = function(frm, method, args, callback) {
frm.set_value(r.message);
frm.updating_party_details = false;
if(callback) callback();
frm.refresh();
}
}
});

View File

@@ -47,7 +47,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-07-25 01:25:57.292915",
"modified": "2016-07-25 05:24:23.032319",
"modified_by": "Administrator",
"module": "Schools",
"name": "Academic Term",
@@ -75,7 +75,7 @@
"write": 1
}
],
"quick_entry": 0,
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_field": "modified",

View File

@@ -97,7 +97,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-07-25 01:25:40.129975",
"modified": "2016-07-25 05:24:23.090530",
"modified_by": "Administrator",
"module": "Schools",
"name": "Academic Year",
@@ -125,7 +125,7 @@
"write": 1
}
],
"quick_entry": 0,
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_field": "modified",

View File

@@ -1,14 +1,17 @@
[
{
"course_name": "_Test Course",
"course_code": "TC100"
"course_code": "TC100",
"course_abbreviation": "TC"
},
{
"course_name": "_Test Course 1",
"course_code": "TC101"
"course_code": "TC101",
"course_abbreviation": "TC1"
},
{
"course_name": "_Test Course 2",
"course_code": "TC102"
"course_code": "TC102",
"course_abbreviation": "TC2"
}
]

View File

@@ -24,27 +24,27 @@ class TestCourseSchedule(unittest.TestCase):
cs1 = make_course_schedule_test_record(simulate= True)
cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time,
student_group="_Test Student Group 1", room="RM0002", do_not_save= 1)
student_group="TC2-TP-2014-2015-_Test Academic Term", room="RM0002", do_not_save= 1)
self.assertRaises(OverlapError, cs2.save)
def test_room_conflict(self):
cs1 = make_course_schedule_test_record(simulate= True)
cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time,
student_group="_Test Student Group 1", instructor="_T-Instructor-00002", do_not_save= 1)
student_group="TC2-TP-2014-2015-_Test Academic Term", instructor="_T-Instructor-00002", do_not_save= 1)
self.assertRaises(OverlapError, cs2.save)
def test_no_conflict(self):
cs1 = make_course_schedule_test_record(simulate= True)
make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time,
student_group="_Test Student Group 1", instructor="_T-Instructor-00002", room="RM0002")
student_group="TC2-TP-2014-2015-_Test Academic Term", instructor="_T-Instructor-00002", room="RM0002")
def make_course_schedule_test_record(**args):
args = frappe._dict(args)
course_schedule = frappe.new_doc("Course Schedule")
course_schedule.student_group = args.student_group or "_Test Student Group"
course_schedule.student_group = args.student_group or "TC-TP-2014-2015-_Test Academic Term"
course_schedule.course = args.course or "_Test Course"
course_schedule.instructor = args.instructor or "_T-Instructor-00001"
course_schedule.room = args.room or "RM0001"

View File

@@ -9,6 +9,7 @@
"docstatus": 0,
"doctype": "DocType",
"document_type": "Document",
"editable_grid": 0,
"fields": [
{
"allow_on_submit": 0,
@@ -122,7 +123,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-07-18 10:30:50.243271",
"modified": "2016-07-25 05:24:23.235387",
"modified_by": "Administrator",
"module": "Schools",
"name": "Discussion",
@@ -150,7 +151,7 @@
"write": 1
}
],
"quick_entry": 0,
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_field": "modified",

View File

@@ -1,6 +1,6 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_import": 1,
"allow_rename": 0,
"autoname": "field:exam_name",
"beta": 0,
@@ -480,7 +480,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-07-25 01:26:26.776581",
"modified": "2016-07-25 06:24:11.126911",
"modified_by": "Administrator",
"module": "Schools",
"name": "Examination",

View File

@@ -79,7 +79,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-07-25 01:26:07.345474",
"modified": "2016-07-25 08:42:24.309236",
"modified_by": "Administrator",
"module": "Schools",
"name": "Fee Category",
@@ -107,7 +107,7 @@
"write": 1
}
],
"quick_entry": 0,
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"search_fields": "description",

View File

@@ -104,10 +104,10 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-07-21 12:25:44.368245",
"modified_by": "r@r.com",
"modified": "2016-07-25 08:43:25.405166",
"modified_by": "Administrator",
"module": "Schools",
"name": "Fee Amount",
"name": "Fee Component",
"name_case": "",
"owner": "Administrator",
"permissions": [],

View File

@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2015, Frappe 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 SGCreationToolCourse(Document):
class FeeComponent(Document):
pass

View File

@@ -146,17 +146,17 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "amount",
"fieldname": "components",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Amount",
"label": "Components",
"length": 0,
"no_copy": 0,
"options": "Fee Amount",
"options": "Fee Component",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -230,7 +230,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-07-25 01:25:22.796777",
"modified": "2016-07-25 08:44:07.886467",
"modified_by": "Administrator",
"module": "Schools",
"name": "Fee Structure",

View File

@@ -13,6 +13,6 @@ class FeeStructure(Document):
def calculate_total(self):
"""Calculates total amount."""
self.total_amount = 0
for d in self.amount:
for d in self.components:
self.total_amount += d.amount

View File

@@ -295,17 +295,17 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "amount",
"fieldname": "components",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Amount",
"label": "Components",
"length": 0,
"no_copy": 0,
"options": "Fee Amount",
"options": "Fee Component",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -394,6 +394,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"default": "0",
"fieldname": "total_amount",
"fieldtype": "Currency",
"hidden": 0,
@@ -419,7 +420,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"default": "",
"default": "0",
"fieldname": "paid_amount",
"fieldtype": "Currency",
"hidden": 0,
@@ -445,6 +446,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"default": "0",
"fieldname": "outstanding_amount",
"fieldtype": "Currency",
"hidden": 0,
@@ -478,7 +480,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-07-25 01:27:43.220809",
"modified": "2016-07-27 03:52:28.509757",
"modified_by": "Administrator",
"module": "Schools",
"name": "Fees",

View File

@@ -14,8 +14,9 @@ class Fees(Document):
def calculate_total(self):
"""Calculates total amount."""
self.total_amount = 0
for d in self.amount:
for d in self.components:
self.total_amount += d.amount
self.outstanding_amount = self.total_amount
def get_fee_list(doctype, txt, filters, limit_start, limit_page_length=20):
user = frappe.session.user

View File

@@ -1,8 +1,10 @@
[
{
"program_name": "_Test Program"
"program_name": "_Test Program",
"program_abbreviation": "TP"
},
{
"program_name": "_Test Program 2"
"program_name": "_Test Program 2",
"program_abbreviation": "TP2"
}
]

View File

@@ -98,7 +98,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-07-25 01:27:20.083617",
"modified": "2016-07-25 05:24:22.881854",
"modified_by": "Administrator",
"module": "Schools",
"name": "Room",
@@ -126,7 +126,7 @@
"write": 1
}
],
"quick_entry": 0,
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_field": "modified",

View File

@@ -556,7 +556,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-07-25 01:27:04.145185",
"modified": "2016-07-25 06:23:57.581538",
"modified_by": "Administrator",
"module": "Schools",
"name": "Student",

View File

@@ -6,10 +6,10 @@ data = {
'fieldname': 'student',
'transactions': [
{
'items': ['Student Group', 'Student Attendance', 'Program Enrollment' ]
'items': ['Student Log', 'Student Group', 'Student Attendance']
},
{
'items': ['Fees', 'Examination']
'items': ['Program Enrollment', 'Fees', 'Examination']
}
]
}

View File

@@ -8,9 +8,12 @@ from erpnext.schools.utils import validate_duplicate_student
import frappe
class StudentBatch(Document):
def validate(self):
validate_duplicate_student(self.students)
def autoname(self):
prog_abb = frappe.db.get_value("Program", self.program, "program_abbreviation")
if not prog_abb:
prog_abb = self.program
self.name = prog_abb + "-"+ self.student_batch_name + "-" + self.academic_year
self.name = prog_abb + "-"+ self.student_batch_name + "-" + self.academic_year
def validate(self):
validate_duplicate_student(self.students)

View File

@@ -1,7 +1,7 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
"allow_import": 1,
"allow_rename": 1,
"autoname": "",
"beta": 0,
"creation": "2015-09-07 12:55:52.072792",
@@ -280,7 +280,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-07-25 01:32:57.819189",
"modified": "2016-07-25 06:23:43.903111",
"modified_by": "Administrator",
"module": "Schools",
"name": "Student Group",

View File

@@ -9,13 +9,7 @@ from frappe import _
from erpnext.schools.utils import validate_duplicate_student
class StudentGroup(Document):
def validate(self):
self.set_name()
self.validate_strength()
self.validate_student_name()
validate_duplicate_student(self.students)
def set_name(self):
def autoname(self):
self.name = frappe.db.get_value("Course", self.course, "course_abbreviation")
if not self.name:
self.name = self.course
@@ -31,6 +25,11 @@ class StudentGroup(Document):
self.name += "-" + self.academic_year
if self.academic_term:
self.name += "-" + self.academic_term
def validate(self):
self.validate_strength()
self.validate_student_name()
validate_duplicate_student(self.students)
def validate_strength(self):
if self.max_strength and len(self.students) > self.max_strength:

View File

@@ -1,13 +1,11 @@
[
{
"group_name": "_Test Student Group",
"program": "_Test Program",
"course": "_Test Course",
"academic_year": "2014-2015",
"academic_term": "_Test Academic Term"
},
{
"group_name": "_Test Student Group 1",
"program": "_Test Program",
"course": "_Test Course 2",
"academic_year": "2014-2015",

View File

@@ -176,7 +176,7 @@
"label": "Courses",
"length": 0,
"no_copy": 0,
"options": "SG Creation Tool Course",
"options": "Student Group Creation Tool Course",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -199,7 +199,7 @@
"issingle": 1,
"istable": 0,
"max_attachments": 0,
"modified": "2016-07-25 01:23:31.192112",
"modified": "2016-07-25 06:40:46.107131",
"modified_by": "Administrator",
"module": "Schools",
"name": "Student Group Creation Tool",

View File

@@ -147,10 +147,10 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-07-21 12:31:41.252860",
"modified_by": "r@r.com",
"modified": "2016-07-25 06:40:49.000588",
"modified_by": "Administrator",
"module": "Schools",
"name": "SG Creation Tool Course",
"name": "Student Group Creation Tool Course",
"name_case": "",
"owner": "Administrator",
"permissions": [],

View File

@@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
# 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 StudentGroupCreationToolCourse(Document):
pass

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