-
%(message_to_show)s
-
{{ frappe.utils.formatdate(doc.reference_date) or '' }}
diff --git a/erpnext/docs/user/manual/en/setting-up/feedback/manual-feedback-request.md b/erpnext/docs/user/manual/en/setting-up/feedback/manual-feedback-request.md
index 4afaee1fed..2e6b12b808 100644
--- a/erpnext/docs/user/manual/en/setting-up/feedback/manual-feedback-request.md
+++ b/erpnext/docs/user/manual/en/setting-up/feedback/manual-feedback-request.md
@@ -4,7 +4,7 @@ We can also send the feedback request to Customer/User without configuring the
Feedback Trigger.
To request a feedback manually go to respective document e.g. Sales Order, Issue etc.
-and click on Ask a Feedback option in Menu.
+and click on Request Feedback option in Menu.

diff --git a/erpnext/education/doctype/student_group/student_group.js b/erpnext/education/doctype/student_group/student_group.js
index f3f8c88624..5373df9124 100644
--- a/erpnext/education/doctype/student_group/student_group.js
+++ b/erpnext/education/doctype/student_group/student_group.js
@@ -82,36 +82,39 @@ frappe.ui.form.on("Student Group", {
max_roll_no = d.group_roll_number;
}
});
- frappe.call({
- method: "erpnext.education.doctype.student_group.student_group.get_students",
- args: {
- "academic_year": frm.doc.academic_year,
- "academic_term": frm.doc.academic_term,
- "group_based_on": frm.doc.group_based_on,
- "program": frm.doc.program,
- "batch" : frm.doc.batch,
- "course": frm.doc.course
- },
- callback: function(r) {
- if(r.message) {
- $.each(r.message, function(i, d) {
- if(!in_list(student_list, d.student)) {
- var s = frm.add_child("students");
- s.student = d.student;
- s.student_name = d.student_name;
- if (d.active === 0) {
- s.active = 0;
+
+ if(frm.doc.academic_year) {
+ frappe.call({
+ method: "erpnext.education.doctype.student_group.student_group.get_students",
+ args: {
+ "academic_year": frm.doc.academic_year,
+ "academic_term": frm.doc.academic_term,
+ "group_based_on": frm.doc.group_based_on,
+ "program": frm.doc.program,
+ "batch" : frm.doc.batch,
+ "course": frm.doc.course
+ },
+ callback: function(r) {
+ if(r.message) {
+ $.each(r.message, function(i, d) {
+ if(!in_list(student_list, d.student)) {
+ var s = frm.add_child("students");
+ s.student = d.student;
+ s.student_name = d.student_name;
+ if (d.active === 0) {
+ s.active = 0;
+ }
+ s.group_roll_number = ++max_roll_no;
}
- s.group_roll_number = ++max_roll_no;
- }
- });
- refresh_field("students");
- frm.save();
- } else {
- frappe.msgprint(__("Student Group is already updated."))
+ });
+ refresh_field("students");
+ frm.save();
+ } else {
+ frappe.msgprint(__("Student Group is already updated."))
+ }
}
- }
- })
+ })
+ }
} else {
frappe.msgprint(__("Select students manually for the Activity based Group"));
}
diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js b/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js
index 72214233ad..c35e397801 100644
--- a/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js
+++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js
@@ -1,8 +1,8 @@
frappe.views.calendar["Patient Appointment"] = {
field_map: {
- "start": "start",
- "end": "end",
+ "start": "appointment_date",
+ "end": "appointment_datetime",
"id": "name",
"title": "patient",
"allDay": "allDay",
diff --git a/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js b/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js
index 3cc8dd5036..507d070444 100644
--- a/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js
+++ b/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js
@@ -3,8 +3,8 @@
frappe.views.calendar["Holiday List"] = {
field_map: {
- "start": "holiday_date",
- "end": "holiday_date",
+ "start": "from_date",
+ "end": "to_date",
"id": "name",
"title": "description",
"allDay": "allDay"
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.js b/erpnext/selling/page/point_of_sale/point_of_sale.js
index 5c4bd166dc..fcd221286e 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -816,7 +816,7 @@ class POSCart {
});
this.numpad.reset_value();
} else {
- const item_code = this.selected_item.attr('data-item-code');
+ const item_code = unescape(this.selected_item.attr('data-item-code'));
const batch_no = this.selected_item.attr('data-batch-no');
const field = this.selected_item.active_field;
const value = this.numpad.get_value();
@@ -863,7 +863,7 @@ class POSCart {
update_item(item) {
const item_selector = item.batch_no ?
- `[data-batch-no="${item.batch_no}"]` : `[data-item-code="${item.item_code}"]`;
+ `[data-batch-no="${item.batch_no}"]` : `[data-item-code="${escape(item.item_code)}"]`;
const $item = this.$cart_items.find(item_selector);
@@ -889,7 +889,7 @@ class POSCart {
const batch_no = item.batch_no || '';
return `
-
${item.item_name}
@@ -933,20 +933,21 @@ class POSCart {
exists(item_code, batch_no) {
const is_exists = batch_no ?
- `[data-batch-no="${batch_no}"]` : `[data-item-code="${item_code}"]`;
+ `[data-batch-no="${batch_no}"]` : `[data-item-code="${escape(item_code)}"]`;
let $item = this.$cart_items.find(is_exists);
+
return $item.length > 0;
}
highlight_item(item_code) {
- const $item = this.$cart_items.find(`[data-item-code="${item_code}"]`);
+ const $item = this.$cart_items.find(`[data-item-code="${escape(item_code)}"]`);
$item.addClass('highlight');
setTimeout(() => $item.removeClass('highlight'), 1000);
}
scroll_to_item(item_code) {
- const $item = this.$cart_items.find(`[data-item-code="${item_code}"]`);
+ const $item = this.$cart_items.find(`[data-item-code="${escape(item_code)}"]`);
if ($item.length === 0) return;
const scrollTop = $item.offset().top - this.$cart_items.offset().top + this.$cart_items.scrollTop();
this.$cart_items.animate({ scrollTop });
@@ -961,7 +962,7 @@ class POSCart {
'[data-action="increment"], [data-action="decrement"]', function() {
const $btn = $(this);
const $item = $btn.closest('.list-item[data-item-code]');
- const item_code = $item.attr('data-item-code');
+ const item_code = unescape($item.attr('data-item-code'));
const action = $btn.attr('data-action');
if(action === 'increment') {
@@ -984,7 +985,7 @@ class POSCart {
this.$cart_items.on('change', '.quantity input', function() {
const $input = $(this);
const $item = $input.closest('.list-item[data-item-code]');
- const item_code = $item.attr('data-item-code');
+ const item_code = unescape($item.attr('data-item-code'));
events.on_field_change(item_code, 'qty', flt($input.val()));
});
@@ -1252,7 +1253,7 @@ class POSItems {
var me = this;
this.wrapper.on('click', '.pos-item-wrapper', function() {
const $item = $(this);
- const item_code = $item.attr('data-item-code');
+ const item_code = unescape($item.attr('data-item-code'));
me.events.update_cart(item_code, 'qty', '+1');
});
}
@@ -1278,7 +1279,7 @@ class POSItems {
const item_title = item_name || item_code;
const template = `
-