CadenceLabelGenerator.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. /**
  2. * Licensed Materials - Property of IBM
  3. *
  4. * IBM Cognos Products: SHARE
  5. *
  6. * Copyright IBM Corp. 2015, 2017
  7. *
  8. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  9. */
  10. define([ 'jquery',
  11. 'moment-timezone',
  12. 'bi/sharecommon/utils/translator'],
  13. function($, moment, t) {
  14. var cadenceLabelGenerator = {};
  15. var __12H_TIME_FORMAT = "LT"; //(Local Time) h:mm |en-us -> 8:30 PM| |fr-fr -> 20:30|
  16. var _getSelectedDays = function(scheduleInfo, timezone) {
  17. var scheduleTZ = scheduleInfo.timezone;
  18. if(!scheduleTZ) {
  19. console.error("Schedule was created with no timezone. Defaulting to 'America/New_York'.");
  20. scheduleTZ = "America/New_York";
  21. }
  22. var parameters = {};
  23. var days = [];
  24. var localizedNames = [
  25. t.translate("schedule_weekday_sunday_t"),
  26. t.translate("schedule_weekday_monday_t"),
  27. t.translate("schedule_weekday_tuesday_t"),
  28. t.translate("schedule_weekday_wednesday_t"),
  29. t.translate("schedule_weekday_thursday_t"),
  30. t.translate("schedule_weekday_friday_t"),
  31. t.translate("schedule_weekday_saturday_t")
  32. ];
  33. var dayNumberMap = {
  34. 'weeklySunday': 0,
  35. 'weeklyMonday': 1,
  36. 'weeklyTuesday': 2,
  37. 'weeklyWednesday': 3,
  38. 'weeklyThursday': 4,
  39. 'weeklyFriday': 5,
  40. 'weeklySaturday': 6
  41. };
  42. /*
  43. * re order the weeklyObj because the order weeklyObj is un-determined
  44. */
  45. var weeklyObj = scheduleInfo.weekly;
  46. for (var key in weeklyObj) {
  47. if(weeklyObj[key]) {
  48. days.push(dayNumberMap[key]);
  49. }
  50. }
  51. days.sort(); // 1 3 5
  52. // calculate the difference in days between source and target timezones
  53. var sourceDay = moment(scheduleInfo.startDate).tz(scheduleTZ).day();
  54. var targetDay = moment(scheduleInfo.startDate).tz(timezone).day();
  55. var diffDays = targetDay - sourceDay;
  56. /*
  57. * Give new key names according to the order
  58. * eg. input: days = [1, 3, 5]
  59. * output: parameters = {param1: "Mon", param2: "Wed", param3: "Fri"}
  60. */
  61. for (var i = 0; i < days.length; i++) {
  62. var newDay = days[i] + diffDays;
  63. if(newDay < 0) {
  64. newDay = newDay+7;
  65. }
  66. else if(newDay > 6) {
  67. newDay = newDay -7;
  68. }
  69. parameters['param' + (i+1)] = localizedNames[newDay];
  70. }
  71. return parameters;
  72. };
  73. /** Retrieve localized string representing the cadence of scheduleDetails's schedule
  74. * Times are local to the timezone passed in. */
  75. cadenceLabelGenerator.getLabelFor = function(scheduleInfo, timezone, locale) {
  76. if (!scheduleInfo) {
  77. return "";
  78. }
  79. var label_key = "";
  80. var parameters = {};
  81. var hasIntraday = (typeof scheduleInfo.intradayRecurrence !== 'undefined')?true:false;
  82. if (scheduleInfo.type === "daily" || scheduleInfo.type === "dailyWithIntradayRecurrence") {
  83. // Daily intradayRecurrence only applies to 'day' dailyPeriod
  84. if (typeof scheduleInfo.daily !== 'undefined') {
  85. var repeat = parseInt(scheduleInfo.everyNPeriods, 10);
  86. if (repeat == 1) {
  87. if ( hasIntraday && scheduleInfo.daily.dailyPeriod == 'day' ) {
  88. label_key = "cadence_daily_day_repeat_label";
  89. }else {
  90. label_key = "cadence_daily_" + scheduleInfo.daily.dailyPeriod + "_label";
  91. if ( scheduleInfo.daily.dailyPeriod == 'day' ) {
  92. parameters["param"] = moment(scheduleInfo.startDate).locale(locale).tz(timezone).format(__12H_TIME_FORMAT);
  93. }
  94. }
  95. }else {
  96. if ( hasIntraday && scheduleInfo.daily.dailyPeriod == 'day' ) {
  97. label_key = "cadence_daily_every_day_repeat_label";
  98. parameters["param"] = repeat;
  99. }else {
  100. label_key = "cadence_daily_every_" + scheduleInfo.daily.dailyPeriod + "_label";
  101. parameters["param"] = repeat;
  102. }
  103. }
  104. } else {
  105. label_key = "cadence_daily_label";
  106. parameters["param"] = moment(scheduleInfo.startDate).locale(locale).tz(timezone).format(__12H_TIME_FORMAT);
  107. }
  108. } else if (scheduleInfo.type === "weekly" || scheduleInfo.type === "weeklyWithIntradayRecurrence") {
  109. if (typeof scheduleInfo.weekly !== 'undefined') {
  110. parameters = _getSelectedDays(scheduleInfo, timezone);
  111. var repeat = parseInt(scheduleInfo.everyNPeriods, 10);
  112. if (repeat == 1) {
  113. if ( hasIntraday ) {
  114. label_key = "cadence_weekly_" + Object.keys(parameters).length + "_repeat_label";
  115. }else {
  116. label_key = "cadence_weekly_" + Object.keys(parameters).length + "_label";
  117. }
  118. // reset parameter
  119. parameters["param"] = moment(scheduleInfo.startDate).locale(locale).tz(timezone).format(__12H_TIME_FORMAT);
  120. } else {
  121. if ( hasIntraday ) {
  122. label_key = "cadence_week_" + Object.keys(parameters).length + "_repeat_label";
  123. // reset parameter
  124. parameters["param"] = repeat;
  125. }else {
  126. label_key = "cadence_week_" + Object.keys(parameters).length + "_label";
  127. parameters["param"] = repeat;
  128. }
  129. }
  130. } else {
  131. label_key = "cadence_weekly_label";
  132. parameters["param"] = moment(scheduleInfo.startDate).locale(locale).tz(timezone).format(__12H_TIME_FORMAT);
  133. }
  134. } else if (scheduleInfo.type === "monthlyRelative" || scheduleInfo.type === "monthlyRelativeWithIntradayRecurrence") {
  135. if (typeof scheduleInfo.monthlyRelative !== 'undefined') {
  136. parameters['param1'] = t.translate("schedule_weekday_" + scheduleInfo.monthlyRelative.monthlyRelativeDay +"_t");
  137. var repeat = parseInt(scheduleInfo.everyNPeriods, 10);
  138. if (repeat == 1) {
  139. if ( hasIntraday ) {
  140. label_key = "cadence_monthly_relative_" + scheduleInfo.monthlyRelative.monthlyRelativeWeek + "_repeat";
  141. }else {
  142. label_key = "cadence_monthly_relative_" + scheduleInfo.monthlyRelative.monthlyRelativeWeek;
  143. }
  144. } else {
  145. if ( hasIntraday ) {
  146. label_key = "cadence_monthly_relative_repeat_" + scheduleInfo.monthlyRelative.monthlyRelativeWeek + "_repeat";
  147. parameters["param"] = repeat;
  148. }else {
  149. label_key = "cadence_monthly_relative_repeat_" + scheduleInfo.monthlyRelative.monthlyRelativeWeek;
  150. parameters["param"] = repeat;
  151. }
  152. }
  153. } else {
  154. label_key = "cadence_monthly_label";
  155. }
  156. } else if (scheduleInfo.type === "monthlyAbsolute" || scheduleInfo.type === "monthlyAbsoluteWithIntradayRecurrence") {
  157. if (typeof scheduleInfo.monthlyAbsolute !== 'undefined') {
  158. parameters['param1'] = scheduleInfo.monthlyAbsolute.monthlyAbsoluteDay;
  159. var repeat = parseInt(scheduleInfo.everyNPeriods, 10);
  160. if (repeat == 1) {
  161. if ( hasIntraday ) {
  162. label_key = "cadence_monthly_absolute_daily_repeat";
  163. }else {
  164. label_key = "cadence_monthly_absolute";
  165. }
  166. } else {
  167. if ( hasIntraday ) {
  168. label_key = "cadence_monthly_absolute_repeat_daily_repeat";
  169. parameters["param"] = repeat;
  170. }else {
  171. label_key = "cadence_monthly_absolute_repeat";
  172. parameters["param"] = repeat;
  173. }
  174. }
  175. } else {
  176. label_key = "cadence_monthly_label";
  177. }
  178. } else if (scheduleInfo.type === "yearlyRelative" || scheduleInfo.type === "yearlyRelativeWithIntradayRecurrence") {
  179. if (typeof scheduleInfo.yearlyRelative !== 'undefined') {
  180. parameters['weekDay'] = t.translate("schedule_weekday_" + scheduleInfo.yearlyRelative.yearlyRelativeDay +"_t");
  181. parameters['month'] = t.translate("schedule_month_short_" + scheduleInfo.yearlyRelative.yearlyRelativeMonth +"_label");
  182. var repeat = parseInt(scheduleInfo.everyNPeriods, 10);
  183. if (repeat == 1) {
  184. if ( hasIntraday ) {
  185. label_key = "cadence_yearly_relative_" + scheduleInfo.yearlyRelative.yearlyRelativeWeek + "_repeat";
  186. }else {
  187. label_key = "cadence_yearly_relative_" + scheduleInfo.yearlyRelative.yearlyRelativeWeek;
  188. }
  189. } else {
  190. if ( hasIntraday ) {
  191. label_key = "cadence_yearly_relative_repeat_" + scheduleInfo.yearlyRelative.yearlyRelativeWeek + "_repeat";
  192. parameters["param"] = repeat;
  193. }else {
  194. label_key = "cadence_yearly_relative_repeat_" + scheduleInfo.yearlyRelative.yearlyRelativeWeek;
  195. parameters["param"] = repeat;
  196. }
  197. }
  198. } else {
  199. label_key = "cadence_yearly_label";
  200. }
  201. } else if (scheduleInfo.type === "yearlyAbsolute" || scheduleInfo.type === "yearlyAbsoluteWithIntradayRecurrence") {
  202. if (typeof scheduleInfo.yearlyAbsolute !== 'undefined') {
  203. parameters['day'] = scheduleInfo.yearlyAbsolute.yearlyAbsoluteDay;
  204. parameters['month'] = t.translate("schedule_month_short_" + scheduleInfo.yearlyAbsolute.yearlyAbsoluteMonth +"_label");
  205. var repeat = parseInt(scheduleInfo.everyNPeriods, 10);
  206. if (repeat == 1) {
  207. if ( hasIntraday ) {
  208. label_key = "cadence_yearly_absolute_daily_repeat";
  209. }else {
  210. label_key = "cadence_yearly_absolute";
  211. }
  212. } else {
  213. if ( hasIntraday ) {
  214. label_key = "cadence_yearly_absolute_repeat_daily_repeat";
  215. parameters["param"] = repeat;
  216. }else {
  217. label_key = "cadence_yearly_absolute_repeat";
  218. parameters["param"] = repeat;
  219. }
  220. }
  221. } else {
  222. label_key = "cadence_yearly_label";
  223. }
  224. } else if (scheduleInfo.type === "trigger") {
  225. if (typeof scheduleInfo.trigger !== 'undefined') {
  226. parameters['triggerName'] = scheduleInfo.trigger.triggerName;
  227. label_key = "cadence_trigger_name_label";
  228. } else {
  229. label_key = "";
  230. }
  231. }
  232. var cadence = "";
  233. if(label_key != "") {
  234. cadence = t.translate(label_key, parameters);
  235. }
  236. return cadence;
  237. };
  238. return cadenceLabelGenerator;
  239. });