Merge branch 'develop'
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index cde4c0e..ee7021d 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -2,7 +2,7 @@
from __future__ import unicode_literals
import frappe
-__version__ = '7.0.29'
+__version__ = '7.0.30'
def get_default_company(user=None):
'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/budget/budget.py b/erpnext/accounts/doctype/budget/budget.py
index 819a635..7b6cde7 100644
--- a/erpnext/accounts/doctype/budget/budget.py
+++ b/erpnext/accounts/doctype/budget/budget.py
@@ -5,7 +5,7 @@
from __future__ import unicode_literals
import frappe
from frappe import _
-from frappe.utils import flt, getdate, add_months, get_last_day
+from frappe.utils import flt, getdate, add_months, get_last_day, fmt_money
from frappe.model.naming import make_autoname
from frappe.model.document import Document
@@ -85,13 +85,17 @@
actual_expense = get_actual_expense(args, cost_center)
if actual_expense > budget_amount:
diff = actual_expense - budget_amount
+ currency = frappe.db.get_value('Company', frappe.db.get_value('Cost Center',
+ cost_center, 'company'), 'default_currency')
- msg = _("{0} Budget for Account {1} against Cost Center {2} is {3}. It will exceed by {4}").format(_(action_for), args.account, cost_center, budget_amount, diff)
+ msg = _("{0} Budget for Account {1} against Cost Center {2} is {3}. It will exceed by {4}").format(_(action_for),
+ frappe.bold(args.account), frappe.bold(cost_center),
+ frappe.bold(fmt_money(budget_amount, currency=currency)), frappe.bold(fmt_money(diff, currency=currency)))
if action=="Stop":
frappe.throw(msg, BudgetError)
else:
- frappe.msgprint(msg)
+ frappe.msgprint(msg, indicator='orange')
def get_accumulated_monthly_budget(monthly_distribution, posting_date, fiscal_year, annual_budget):
distribution = {}
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.js b/erpnext/accounts/doctype/cost_center/cost_center.js
index dea87f3..83ecc9f 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center.js
@@ -32,8 +32,13 @@
cur_frm.toggle_display('sb1', doc.is_group==0)
cur_frm.set_intro(intro_txt);
- cur_frm.add_custom_button(__('Chart of Cost Centers'),
- function() { frappe.set_route("Tree", "Cost Center"); }, __("View"))
+ if(!cur_frm.doc.__islocal) {
+ cur_frm.add_custom_button(__('Chart of Cost Centers'),
+ function() { frappe.set_route("Tree", "Cost Center"); });
+
+ cur_frm.add_custom_button(__('Budget'),
+ function() { frappe.set_route("List", "Budget", {'cost_center': cur_frm.doc.name}); });
+ }
}
cur_frm.cscript.parent_cost_center = function(doc, cdt, cdn) {
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index df0874b..599e9b1 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -13,9 +13,9 @@
@frappe.whitelist()
def get_pos_data():
doc = frappe.new_doc('Sales Invoice')
- doc.update_stock = 1;
doc.is_pos = 1;
pos_profile = get_pos_profile(doc.company) or {}
+ doc.update_stock = pos_profile.get('update_stock')
if pos_profile.get('name'):
pos_profile = frappe.get_doc('POS Profile', pos_profile.get('name'))
@@ -105,7 +105,7 @@
def get_items(doc, pos_profile):
item_list = []
- for item in frappe.get_all("Item", fields=["*"], filters={'disabled': 0, 'has_variants': 0}):
+ for item in frappe.get_all("Item", fields=["*"], filters={'disabled': 0, 'has_variants': 0, 'is_sales_item': 1}):
item_doc = frappe.get_doc('Item', item.name)
if item_doc.taxes:
item.taxes = json.dumps(dict(([d.tax_type, d.tax_rate] for d in
diff --git a/erpnext/hr/doctype/employee/employee_list.js b/erpnext/hr/doctype/employee/employee_list.js
index 697900c..c786004 100644
--- a/erpnext/hr/doctype/employee/employee_list.js
+++ b/erpnext/hr/doctype/employee/employee_list.js
@@ -1,5 +1,5 @@
frappe.listview_settings['Employee'] = {
- add_fields: ["status", "branch", "department", "designation"],
+ add_fields: ["status", "branch", "department", "designation","image"],
filters: [["status","=", "Active"]],
get_indicator: function(doc) {
var indicator = [__(doc.status), frappe.utils.guess_colour(doc.status), "status,=," + doc.status];
diff --git a/erpnext/patches/v7_0/calculate_total_costing_amount.py b/erpnext/patches/v7_0/calculate_total_costing_amount.py
index 4da839f..11fdff9 100644
--- a/erpnext/patches/v7_0/calculate_total_costing_amount.py
+++ b/erpnext/patches/v7_0/calculate_total_costing_amount.py
@@ -13,4 +13,5 @@
ts.flags.ignore_validate = True
ts.flags.ignore_mandatory = True
ts.flags.ignore_validate_update_after_submit = True
+ ts.flags.ignore_links = True
ts.save()
diff --git a/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.json b/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.json
index cbbc774..b5547d3 100644
--- a/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.json
+++ b/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.json
@@ -191,6 +191,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
+ "depends_on": "eval:doc.get_students_from==\"Program Enrollments\"",
"fieldname": "new_program",
"fieldtype": "Link",
"hidden": 0,
@@ -217,6 +218,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
+ "depends_on": "eval:doc.get_students_from==\"Program Enrollments\"",
"fieldname": "new_academic_year",
"fieldtype": "Link",
"hidden": 0,
@@ -275,7 +277,7 @@
"issingle": 1,
"istable": 0,
"max_attachments": 0,
- "modified": "2016-07-25 01:24:05.632746",
+ "modified": "2016-08-17 07:50:40.399492",
"modified_by": "Administrator",
"module": "Schools",
"name": "Program Enrollment Tool",
diff --git a/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py b/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py
index b483ef5..6c10880 100644
--- a/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py
+++ b/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py
@@ -6,6 +6,7 @@
import frappe
from frappe import _
from frappe.model.document import Document
+from erpnext.schools.api import enroll_student
class ProgramEnrollmentTool(Document):
def get_students(self):
@@ -29,11 +30,16 @@
def enroll_students(self):
for stud in self.students:
- prog_enrollment = frappe.new_doc("Program Enrollment")
- prog_enrollment.student = stud.student
- prog_enrollment.student_name = stud.student_name
- prog_enrollment.program = self.new_program
- prog_enrollment.academic_year = self.new_academic_year
- prog_enrollment.save()
+ if stud.student:
+ prog_enrollment = frappe.new_doc("Program Enrollment")
+ prog_enrollment.student = stud.student
+ prog_enrollment.student_name = stud.student_name
+ prog_enrollment.program = self.new_program
+ prog_enrollment.academic_year = self.new_academic_year
+ prog_enrollment.save()
+ elif stud.student_applicant:
+ prog_enrollment = enroll_student(stud.student_applicant)
+ prog_enrollment.academic_year = self.academic_year
+ prog_enrollment.save()
frappe.msgprint("Students have been enrolled.")
\ No newline at end of file
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 402ff11..1ec8029 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -80,7 +80,7 @@
} else {
filters = {
'item_code': item.item_code,
- 'posting_date': me.frm.doc.posting_date || nowdate(),
+ 'posting_date': me.frm.doc.posting_date || frappe.datetime.nowdate(),
}
if(item.warehouse) filters["warehouse"] = item.warehouse