Advertisement
Guest User

Untitled

a guest
Apr 27th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.60 KB | None | 0 0
  1. /*jshint node: true */
  2. var express = require('express'),
  3. request = require('request'),
  4. db = require('./db.js'),
  5. router = express.Router();
  6.  
  7. function achievementSemester(course_id, teaching) {
  8. return new Promise(function(resolve, reject) {
  9. var error = {'status': -1, 'message': 'error'};
  10. var empty = {'status': 0, 'message': 'empty'};
  11. var sql = "SELECT abet_outcome, grade, lower, type, number FROM course_outcome_bound NATURAL JOIN course_outcome_source WHERE course_id = '" + course_id + "' AND year = '" + teaching.year + "' AND semester = '" + teaching.semester + "'";
  12. db.query(sql, function(err, result) {
  13. if (err) {
  14. reject(error);
  15. }
  16. if (result.length > 0) {
  17. var description = {};
  18. for (i = 0; i < result.length; i++) {
  19. if (!(result[i].abet_outcome in description)) {
  20. description[result[i].abet_outcome] = {};
  21. description[result[i].abet_outcome].type = result[i].type;
  22. description[result[i].abet_outcome].number = result[i].number;
  23. description[result[i].abet_outcome].bound = {};
  24. }
  25. description[result[i].abet_outcome].bound[result[i].grade] = result[i].lower;
  26. }
  27. var sql = "SELECT class_id, type, scores FROM " + course_id + " WHERE year = '" + teaching.year + "' AND semester = '" + teaching.semester + "'";
  28. db.query(sql, function(err, result) {
  29. if (err) {
  30. reject(error);
  31. }
  32. if (result.length > 0) {
  33. for (i = 0; i < result.length; i++) {
  34. result[i].scores = result[i].scores.split(" ");
  35. }
  36. var data = result;
  37. var result = {};
  38. for (abet_outcome in description) {
  39. result[abet_outcome] = {};
  40. for (index in data) {
  41. if (!result[abet_outcome][data[index].class_id]) {
  42. result[abet_outcome][data[index].class_id] = {};
  43. for (grade in description[abet_outcome].bound) {
  44. result[abet_outcome][data[index].class_id][grade] = 0;
  45. }
  46. }
  47. if (data[index].type == description[abet_outcome].type) {
  48. var number = description[abet_outcome].number;
  49. if (data[index].scores[number - 1] >= description[abet_outcome].bound.A) {
  50. result[abet_outcome][data[index].class_id].A++;
  51. } else if (data[index].scores[number - 1] >= description[abet_outcome].bound.B) {
  52. result[abet_outcome][data[index].class_id].B++;
  53. } else if (data[index].scores[number - 1] >= description[abet_outcome].bound.C) {
  54. result[abet_outcome][data[index].class_id].C++;
  55. } else if (data[index].scores[number - 1] >= description[abet_outcome].bound.D) {
  56. result[abet_outcome][data[index].class_id].D++;
  57. } else {
  58. result[abet_outcome][data[index].class_id].E++;
  59. }
  60. }
  61. }
  62. }
  63. var success = {'status': 1, 'message': result};
  64. resolve(success);
  65. } else {
  66. resolve(empty);
  67. }
  68. });
  69. } else {
  70. resolve(empty);
  71. }
  72. });
  73. });
  74. }
  75.  
  76. function achievementABET(teaching) {
  77. return new Promise(function(resolve, reject) {
  78. var error = {'status': -1, 'message': 'error'};
  79. var empty = {'status': 0, 'message': 'empty'};
  80. var sql = "SELECT id FROM course";
  81. db.query(sql, function(err, result) {
  82. if (err) {
  83. reject(error);
  84. }
  85. var courses = result;
  86. var sql = "SELECT id FROM abet_outcome";
  87. db.query(sql, function(err, result) {
  88. if (err) {
  89. reject(error);
  90. }
  91. var outcomes = result;
  92. var result = {};
  93. var promises = [];
  94. for (i = 0; i < courses.length; i++) {
  95. promises.push(
  96. achievementSemester(courses[i].id, teaching).then(function(body) {
  97. body = body.message;
  98. if (body != 'empty' && body != 'error') {
  99. for (abet_outcome in body) {
  100. if (!result[abet_outcome]) {
  101. result[abet_outcome] = {};
  102. result[abet_outcome]['A'] = 0;
  103. result[abet_outcome]['B'] = 0;
  104. result[abet_outcome]['C'] = 0;
  105. result[abet_outcome]['D'] = 0;
  106. result[abet_outcome]['E'] = 0;
  107. }
  108. for (class_id in body[abet_outcome]) {
  109. for (grade in body[abet_outcome][class_id]) {
  110. result[abet_outcome][grade] += body[abet_outcome][class_id][grade];
  111. }
  112. }
  113. }
  114. }
  115. })
  116. );
  117. }
  118. Promise.all(promises).then(function() {
  119. var success = {'status': 1, 'message': result};
  120. resolve(success);
  121. }).catch(function(err) {
  122. res.status(400).json({'status': -1, 'message': 'error'});
  123. });
  124. });
  125. });
  126. });
  127. }
  128.  
  129. router.post('/semester', function(req, res) {
  130. var course_id = req.body.course_id;
  131. var teaching = req.body.teaching;
  132. achievementSemester(course_id, teaching).then(function(body) {
  133. res.status(200).json(body);
  134. }).catch(function(err) {
  135. res.status(400).json(body);
  136. });
  137. });
  138.  
  139. router.post('/abetoutcome', function(req, res) {
  140. var teaching = req.body.teaching;
  141. achievementABET(teaching).then(function(body) {
  142. res.status(200).json(body);
  143. }).catch(function(err) {
  144. res.status(400).json(body);
  145. });
  146. });
  147.  
  148. router.post('/total', function(req, res) {
  149. var teachings = [];
  150. for (year = 2013; year <= 2017; year++) {
  151. for (semester = 1; semester <= 2; semester++) {
  152. teachings.push({
  153. year: year,
  154. semester: semester
  155. });
  156. }
  157. }
  158. var result = {};
  159. var promises = [];
  160. for (i = 0; i < teachings.length; i++) {
  161. promises.push(
  162. achievementABET(teachings[i]).then(function(body) {
  163. body = body.message;
  164. if (body != 'empty' && body != 'error') {
  165. for (abet_outcome in body) {
  166. if (!result[abet_outcome]) {
  167. result[abet_outcome] = {};
  168. result[abet_outcome]['A'] = 0;
  169. result[abet_outcome]['B'] = 0;
  170. result[abet_outcome]['C'] = 0;
  171. result[abet_outcome]['D'] = 0;
  172. result[abet_outcome]['E'] = 0;
  173. }
  174. for (grade in body[abet_outcome]) {
  175. result[abet_outcome][grade] += body[abet_outcome][grade];
  176. }
  177. }
  178. }
  179. })
  180. );
  181. }
  182. Promise.all(promises).then(function() {
  183. res.status(200).json({'status': 1, 'message': result});
  184. }).catch(function(err) {
  185. res.status(400).json({'status': -1, 'message': 'error'});
  186. });
  187. });
  188.  
  189. module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement