Added error message incase user specified start or due date without time and also added start date and due date comparison validation in ccx coach dashboard validation.

This commit is contained in:
Amir Qayyum Khan
2015-10-07 15:06:32 +05:00
parent b932a202d8
commit 3ee5acfc00
3 changed files with 97 additions and 19 deletions

View File

@@ -104,23 +104,41 @@ var edx = edx || {};
// Add unit handler
$('#add-unit-button').on('click', function(event) {
event.preventDefault();
var chapter = self.chapter_select.val(),
sequential = self.sequential_select.val(),
vertical = self.vertical_select.val(),
units = self.find_lineage(self.schedule,
chapter,
sequential === 'all' ? null : sequential,
vertical === 'all' ? null: vertical),
start = self.get_datetime('start'),
due = self.get_datetime('due');
units.map(self.show);
var unit = units[units.length - 1];
if (unit !== undefined && start) { unit.start = start; }
if (unit !== undefined && due) { unit.due = due; }
self.schedule_apply([unit], self.show);
self.schedule_collection.set(self.schedule);
self.dirty = true;
self.render();
// Default value of time is 00:00.
var start, chapter, sequential, vertical, units, due;
start = self.get_datetime('start');
chapter = self.chapter_select.val();
sequential = self.sequential_select.val();
vertical = self.vertical_select.val();
units = self.find_lineage(
self.schedule,
chapter,
sequential === 'all' ? null : sequential,
vertical === 'all' ? null : vertical
);
due = self.get_datetime('due');
var errorMessage = self.valid_dates(start, due);
if (_.isUndefined(errorMessage)) {
units.map(self.show);
var unit = units[units.length - 1];
if (!_.isUndefined(unit)) {
if (!_.isNull(start)) {
unit.start = start;
}
if (!_.isNull(due)) {
unit.due = due;
}
}
self.schedule_apply([unit], self.show);
self.schedule_collection.set(self.schedule);
self.dirty = true;
self.render();
} else {
self.dirty = false;
$('#ccx_schedule_error_message').text(errorMessage);
$('#ajax-error').show().focus();
$('#dirty-schedule').hide();
}
});
// Handle save button
@@ -251,9 +269,27 @@ var edx = edx || {};
}
},
valid_dates: function(start, due) {
var errorMessage;
// Start date is compulsory and due date is optional.
if (_.isEmpty(start) && !_.isEmpty(due)) {
errorMessage = gettext("Please enter valid start date and time.");
} else if (!_.isEmpty(start) && !_.isEmpty(due)) {
var requirejs = window.require || RequireJS.require;
var moment = requirejs("moment");
var parsedDueDate = moment(due, 'YYYY-MM-DD HH:mm');
var parsedStartDate = moment(start, 'YYYY-MM-DD HH:mm');
if (parsedDueDate.isBefore(parsedStartDate)) {
errorMessage = gettext("Due date cannot be before start date.");
}
}
return errorMessage;
},
get_datetime: function(which) {
var date = $('form#add-unit input[name=' + which + '_date]').val();
var time = $('form#add-unit input[name=' + which + '_time]').val();
time = _.isEmpty(time) ? "00:00" : time;
if (date && time) {
return date + ' ' + time; }
return null;

View File

@@ -124,7 +124,7 @@ define(['common/js/spec_helpers/ajax_helpers', 'js/ccx/schedule'],
val = "i4x://edX/DemoX/sequential/edx_introduction";
view.sequential_select.val(val);
view.sequential_select.change();
val = "i4x://edX/DemoX/vertical/vertical_0270f6de40fc",
val = "i4x://edX/DemoX/vertical/vertical_0270f6de40fc";
view.vertical_select.val(val);
view.vertical_select.change();
expect(view.vertical_select.val()).toEqual(val);
@@ -141,11 +141,53 @@ define(['common/js/spec_helpers/ajax_helpers', 'js/ccx/schedule'],
view.vertical_select.val(val);
view.vertical_select.change();
var unit = view.find_unit(view.schedule, 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b');
view.set_datetime('start', '2015-12-12 10:00');
view.set_datetime('due', '2015-12-12 10:30');
expect(unit.hidden).toBe(true);
$('#add-unit-button').click();
expect(unit.hidden).toBe(false);
});
it("add unit when start date is greater the due date", function() {
var val = 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b';
view.chapter_select.val(val);
view.chapter_select.change();
val = "i4x://edX/DemoX/sequential/edx_introduction";
view.sequential_select.val(val);
view.sequential_select.change();
val = "i4x://edX/DemoX/vertical/vertical_0270f6de40fc";
view.vertical_select.val(val);
view.vertical_select.change();
var unit = view.find_unit(view.schedule, 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b');
// start date is before due date
view.set_datetime('start', '2015-11-13 10:45');
view.set_datetime('due', '2015-11-12 10:00');
expect(unit.hidden).toBe(true);
$('#add-unit-button').click();
// Assert unit is not added to schedule
expect(unit.hidden).toBe(true);
});
it("add unit when start date is missing", function() {
var val = 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b';
view.chapter_select.val(val);
view.chapter_select.change();
val = "i4x://edX/DemoX/sequential/edx_introduction";
view.sequential_select.val(val);
view.sequential_select.change();
val = "i4x://edX/DemoX/vertical/vertical_0270f6de40fc";
view.vertical_select.val(val);
view.vertical_select.change();
var unit = view.find_unit(view.schedule, 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b');
// start date is missing
view.set_datetime('start', null);
view.set_datetime('due', '2015-12-12 10:00');
expect(unit.hidden).toBe(true);
$('#add-unit-button').click();
// Assert unit is not added to schedule
expect(unit.hidden).toBe(true);
});
it("gets a datetime string from date and time fields", function() {
view.set_datetime('start', '2015-12-12 10:45');
expect($('form#add-unit input[name=start_date]')).toHaveValue('2015-12-12');

View File

@@ -316,7 +316,7 @@
},
'js/ccx/schedule': {
exports: 'js/ccx/schedule',
deps: ['jquery', 'underscore', 'backbone', 'gettext']
deps: ['jquery', 'underscore', 'backbone', 'gettext', 'moment']
},
// Backbone classes loaded explicitly until they are converted to use RequireJS