unserver-unify
Version:
227 lines (218 loc) • 7.35 kB
JavaScript
;
angular.module('bamboo.course').controller("OFCourseCtrl", function($scope, $rootScope, $state, loginService, $compile, $window, $stateParams, ApiService, calendarEventService, UserService, $location, CommonService, fullWidthService, $document) {
this.id = $stateParams.cid;
console.log($stateParams);
var self = this;
this.item = {};
this.teacherPicUrl = ApiService.SHOST + "/photo/" + ApiService.RES + "/teachers/";
$scope.timeUp = false;
$scope.fundingResult = false;
this.defaultPhotoUrl = "assets/images/course_no-image.jpg";
this.newsPicUrl = ApiService.SHOST + "/ofcourses/";
this.promise = {};
self.currency = (loginService.school.currency&&loginService.school.currency.sign)?loginService.school.currency.sign:'$';
if (loginService.subDomain == 'gsx') {
$rootScope.fullwidthflag = true;
}
$scope.$on("$destroy", function() {
console.log('-- destroy --');
fullWidthService.listen();
});
ApiService.get("/ofcourse/" + self.id).then(function(result) {
// console.log( '-Starting auth session result: ');
if (result.data.success) {
console.log(result.data.data);
self.item = result.data.data || {};
if (self.item.photo) {
self.imageUrl = self.newsPicUrl + self.item.photo;
}
if (self.item.editors) {
getEditorInfo(self.item.editors);
}
//self.promise = $interval(isTimeUp, 1000);
}
});
this.editors = [];
$scope.scrollTo = function(id) {
var duration = 1000; //milliseconds
var offset = 100; //pixels; adjust for floating menu, context etc
//Scroll to #some-id with 30 px "padding"
//Note: Use this in a directive, not with document.getElementById
var someElement = angular.element(document.getElementById(id));
$document.scrollToElement(someElement, offset, duration);
};
function getEditorInfo(names) {
// get teacher info for all editors
UserService.getTeachersInfoByLoginnames(names, function(data) {
var teacherinfos = {};
self.editors = [];
angular.forEach(data, function(teacher, index) {
if (teacher.photo && !teacher.avatarflag) {
teacher.photourl = self.teacherPicUrl + teacher._id + "/" + teacher.photo;
} else if (teacher.avatar) {
var user = {
id: teacher.userid,
avatar: teacher.avatar,
}
teacher.photourl = CommonService.getAvatarSrc(user);
} else {
teacher.photourl = self.defaultPersonPhotoUrl;
}
self.editors.push(teacher);
})
});
}
this.eventSources = [];
var info = {
action: 'getcoursesessions',
lid: self.id,
}
if (loginService.user) {
info.action = "getmycoursesessions";
}
var eventdata = [];
ApiService.post('/ofcourse', info).then(function(result) {
if (result.data.success) {
var resourceItems = result.data.data.items;
console.log(resourceItems);
var apps = result.data.data.apps || [];
self.apps = apps;
var appInfo = {};
angular.forEach(apps, function(app, index) {
// console.log(app);
var key = app.sessionId + app.time;
appInfo[key] = true;
})
// console.log(appInfo);
angular.forEach(resourceItems, function(item, idx) {
//item.end = timeHelper.calEndTime(item.start, item.len);
for (var i = 0; i < item.repeatCounter; i++) {
var time = item.start;
switch (item.repeatType) {
case 'week':
time = moment(item.start).add(i, 'weeks').toDate();
break;
case 'month':
time = moment(item.start).add(i, 'months').toDate();
break;
case 'day':
time = moment(item.start).add(i, 'days').toDate();
break;
}
var info = {
title: item.name,
start: time,
stick: true,
id: item._id,
address: item.address,
}
var key = item._id + time.toISOString();
// console.log(key);
if (appInfo[key]) {
info.selected = true;
}
eventdata.push(info);
}
});
//console.log(resourceItems);
self.eventData = eventdata;
self.eventSources = [eventdata];
console.log(self.eventData);
self.eventsready = true;
}
});
this.time = new Date();
function enroll(data) {
if (self.item.price) {
var info = {
action: "paypalbuyoffsession",
cid: self.id,
sid: data.id,
time: data.start.toDate(),
url: $location.absUrl(),
}
ApiService.post('/payment', info).then(function(result) {
console.log(result);
if (result.data.success) {
console.log(result.data.data);
if (result.data.data.redirectUrl) {
CommonService.showInfo('Redirect to Payment Page , Please wait ...');
$window.location.href = result.data.data.redirectUrl;
} else if (result.data.data.enrolled) {
/* $state.go("index.courses.course", {
cid: _self.id,
cs:ApiService.getCheckSum(_self.id)
}); */
}
}
});
} else {
var info = {
action: 'applysession',
time: data.start.toDate(),
id: data.id,
}
ApiService.post('/ofcourse', info).then(function(result) {
console.log('result');
$state.reload();
});
}
}
this.book = function(data) {
var string;
if (!loginService.user) {
$rootScope.showCourseLoginDialog();
return;
}
if (self.item.price) {
string = "Do you really want to book the session ?";
} else {
string = "Do you really want to book the session , The payment will be made on Site?";
}
CommonService.showConfirm(string, function() {
data.start = moment(data.start);
enroll(data);
})
}
this.eventClick = function(data, jsEvent, view) {
if (!loginService.user) {
$rootScope.showCourseLoginDialog();
return;
}
if (data.selected) {
CommonService.showInfo('Already Booked!');
return;
}
console.log(data);
console.log(data.start.toDate());
var string;
if (self.item.price) {
string = "Do you really want to book the session ?";
} else {
string = "Do you really want to book the session , The payment will be made on Site?";
}
CommonService.showConfirm(string, function() {
enroll(data);
})
}
this.eventRender = function(event, element, view) {
if (!event.selected) {
element.append(calendarEventService.checkEvent(event));
$compile(element)($scope);
}
}
this.calendar = {
height: 600,
// editable: true,
// editable: true,
header: {
left: 'title',
center: '',
/*TODO: make these work*/
right: 'today prev,next'
},
eventClick: self.eventClick,
eventRender: self.eventRender,
// eventDrop: self.alertOnDrop,
}
});