schedule.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. // Licensed Materials - Property of IBM
  2. //
  3. // IBM Cognos Products: ps
  4. //
  5. // (C) Copyright IBM Corp. 2005, 2016
  6. //
  7. // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. // Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
  9. // Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
  10. var regExp = new RegExp("Error$"); //regex for (Ends with 'Error')
  11. var regExpDaily = new RegExp("^daily"); //regex for (Starts with 'daily')
  12. var regExpWeekly = new RegExp("^weekly"); //regex for (Starts with 'weekly')
  13. var regExpMonthly = new RegExp("^monthly"); //regex for (Starts with 'monthly')
  14. var MSG_ERR_INCORRECT_END_DATE = ADM.SCH.IDS_PROP_SCHED_BAD_END_DATE;
  15. var MSG_ERR_INCORRECT_START_DATE = ADM.SCH.IDS_PROP_SCHED_BAD_START_DATE;
  16. var MSG_ERR_INCOMPATIBLE_DATES = ADM.SCH.IDS_PROP_SCHED_INCOMPATIBLE_DATES;
  17. var MSG_ERR_NO_DAY_SELECTION = ADM.SCH.IDS_PROP_SCHED_NO_DAY_SELECTION;
  18. var MSG_ERR_NO_SUBTYPE_SELECTION = ADM.SCH.IDS_PROP_SCHED_NO_SUBTYPE_SELECTION;
  19. var MSG_ERR_PAGE_NOT_LOADED = ADM.SCH.IDS_PROP_SCHED_PAGE_NOT_LOADED;
  20. var MSG_ERR_INVALID_START_DATE = ADM.SCH.IDS_PROP_SCHED_INVALID_START_DATE;
  21. var MSG_ERR_INVALID_END_DATE = ADM.SCH.IDS_PROP_SCHED_INVALID_END_DATE;
  22. var MSG_WARN_DIFF_INIT_TIME_ZONE = ADM.SCH.IDS_PROP_SCHED_DIFF_INIT_TIME_ZONE;
  23. var page_loading = 'false';
  24. var isPromptingEnabled = true;
  25. function validate_positiveIntegerProp(e) {
  26. if (e) {
  27. var x=parseInt(e.value,10);
  28. if (e.value < 1 || isNaN(e.value) || parseInt(e.value, 10) != e.value) {
  29. window.alert(MSG_ERR_POSITIVE);
  30. e.focus();
  31. return false;
  32. }
  33. if ( parseInt(e.value, 10) == e.value)
  34. e.value = parseInt(e.value, 10);
  35. }
  36. return true;
  37. }
  38. // ..............................................................................
  39. // Checks for end date being earlier than or the same as the start date.
  40. function validateDateSequence(iStartDay, iStartMonth, iStartYear, iStartHour, iStartMinute, iEndDay, iEndMonth, iEndYear, iEndHour, iEndMinute) {
  41. var bRetVal = true;
  42. if (iEndYear < iStartYear)
  43. bRetVal = false;
  44. else if (iEndYear == iStartYear) {
  45. if (iEndMonth < iStartMonth)
  46. bRetVal = false;
  47. else if (iEndMonth == iStartMonth) {
  48. if (iEndDay < iStartDay)
  49. bRetVal = false;
  50. else if (iEndDay == iStartDay) {
  51. if (iEndHour < iStartHour)
  52. bRetVal = false;
  53. else if (iEndHour == iStartHour) {
  54. if (iEndMinute < iStartMinute)
  55. bRetVal = false;
  56. else if (iEndMinute == iStartMinute)
  57. bRetVal = false;
  58. }
  59. }
  60. }
  61. }
  62. if (!bRetVal) {
  63. alert(MSG_ERR_INCOMPATIBLE_DATES);
  64. return false;
  65. } else {
  66. return true;
  67. }
  68. }
  69. function validateSchedule() {
  70. if (isScheduleReadOnly()) {
  71. return true;
  72. }
  73. var frmInput = document.pform;
  74. var iStartDay, iStartMonth, iStartYear, iStartHour, iStartMinute, iEndDay, iEndMonth, iEndYear, iEndHour, iEndMinute;
  75. var untilType = 'no_end';
  76. var interval = getScheduleInterval();
  77. if (page_loading == 'true') {
  78. alert(MSG_ERR_PAGE_NOT_LOADED);
  79. return frmInput.submit();
  80. }
  81. if (!pickerControldateFrom.isValid() ) {
  82. alert (MSG_ERR_INVALID_START_DATE);
  83. return false;
  84. }
  85. if (!pickerControldateTo.isValid() ) {
  86. alert (MSG_ERR_INVALID_END_DATE);
  87. return false;
  88. }
  89. // Check if current Time Zone is the same as the Time Zone where schedule was initially created
  90. if (frmInput.m_timeZoneID && (frmInput.m_timeZoneID.value != "") && (frmInput.m_timeZoneID.value != frmInput.timezone.value)) {
  91. if (!confirm (MSG_WARN_DIFF_INIT_TIME_ZONE)) {
  92. return false;
  93. }
  94. }
  95. // Check the Start Date Time.
  96. if (frmInput.p_sched_date1.value == '' || frmInput.p_sched_time1.value == '' ) {
  97. alert (MSG_ERR_INCORRECT_START_DATE);
  98. return false;
  99. }
  100. //Get schedule until type.
  101. for (i=0; i < frmInput.m_sp_endType.length; i++) {
  102. if ( frmInput.m_sp_endType[i].checked == true ) {
  103. untilType = frmInput.m_sp_endType[i].value;
  104. break;
  105. }
  106. }
  107. // Check the End Date Time.
  108. if ( untilType == 'onDate' && (frmInput.p_sched_date2.value == '' || frmInput.p_sched_time2.value == '')) {
  109. alert (MSG_ERR_INCORRECT_END_DATE);
  110. return false;
  111. }
  112. // If we have a start and an end date then make sure the end date is not earlier than the start date
  113. if (untilType == 'onDate') {
  114. iStartYear = frmInput.p_sched_date1.value.substring(0, 4);
  115. iStartMonth = frmInput.p_sched_date1.value.substring(5, 7);
  116. iStartDay = frmInput.p_sched_date1.value.substring(8, 10);
  117. iStartHour = frmInput.p_sched_time1.value.substring(0, 2);
  118. iStartMinute = frmInput.p_sched_time1.value.substring(3, 5);
  119. iEndYear = frmInput.p_sched_date2.value.substring(0, 4);
  120. iEndMonth = frmInput.p_sched_date2.value.substring(5, 7);
  121. iEndDay = frmInput.p_sched_date2.value.substring(8, 10);
  122. iEndHour = frmInput.p_sched_time2.value.substring(0, 2);
  123. iEndMinute = frmInput.p_sched_time2.value.substring(3, 5);
  124. // We could create date objects and compare them but that involves too much work to format ur date values to JS acceptable format.
  125. if (!(validateDateSequence(iStartDay, iStartMonth, iStartYear, iStartHour, iStartMinute, iEndDay, iEndMonth, iEndYear, iEndHour, iEndMinute))) {
  126. return false;
  127. }
  128. }
  129. if (interval=='trigger') {
  130. if (frmInput.m_sp_triggerName) {
  131. if (trim(frmInput.m_sp_triggerName.value) == '') {
  132. frmInput.m_sp_triggerName.focus();
  133. alert(MSG_EMPTY_TRIGGER_NAME);
  134. return false;
  135. }
  136. }
  137. } else if (regExpDaily.test(interval)) {
  138. // Check for a valid entry in the frequency field.
  139. if (frmInput.m_sp_dailyPeriod) {
  140. var selectedInterval = frmInput.m_sp_dailyPeriod.value;
  141. if (frmInput.m_sp_dailyPeriod.length) {
  142. for (var i=0;i<frmInput.m_sp_dailyPeriod.length;i++) {
  143. if (frmInput.m_sp_dailyPeriod[i].checked) {
  144. selectedInterval = frmInput.m_sp_dailyPeriod[i].value;
  145. break;
  146. }
  147. }
  148. }
  149. if (selectedInterval) {
  150. if (!validate_positiveIntegerProp(frmInput["m_sp_everyN"+selectedInterval+"s"])) {
  151. return false;
  152. }
  153. }
  154. }
  155. } else if (regExpWeekly.test(interval)) {
  156. if (!validate_positiveIntegerProp(frmInput.m_sp_everyNweeks)) {
  157. return false;
  158. }
  159. with (frmInput) {
  160. if (!m_sp_weeklyMonday.checked && !m_sp_weeklyTuesday.checked &&
  161. !m_sp_weeklyWednesday.checked && !m_sp_weeklyThursday.checked &&
  162. !m_sp_weeklyFriday.checked && !m_sp_weeklySaturday.checked &&
  163. !m_sp_weeklySunday.checked) {
  164. alert(MSG_ERR_NO_DAY_SELECTION);
  165. return false;
  166. }
  167. }
  168. } else if (regExpMonthly.test(interval)) {
  169. // Check for a valid entry in the frequency field.
  170. if (frmInput.sub_type[0].checked) {
  171. if (!validate_positiveIntegerProp(frmInput.m_sp_everyNmonthsRel)) {
  172. return false;
  173. }
  174. }
  175. else {
  176. if (!validate_positiveIntegerProp(frmInput.m_sp_everyNmonthsAbs)) {
  177. return false;
  178. }
  179. }
  180. }
  181. if (frmInput.h_CAM_action) {
  182. frmInput.h_CAM_action.value = 'generateTC';
  183. }
  184. if (frmInput.df_intra && interval!='trigger') {
  185. if (frmInput.df_intra.checked) {
  186. if (!validate_positiveIntegerProp(frmInput.m_sp_intradayRecurrenceIntervalNum)) {
  187. return false;
  188. }
  189. }
  190. }
  191. return true;
  192. }
  193. function checkDateControlChanged () {
  194. var form = document.pform;
  195. var untilType = '';
  196. //Get schedule until type.
  197. for (i=0; i < 3; i++) {
  198. if ( form.m_sp_endType[i].checked == true ) {
  199. untilType = form.m_sp_endType[i].value;
  200. break;
  201. }
  202. }
  203. }
  204. function setMonthlyAbsolute(absolute) {
  205. var frm = document.pform;
  206. if (absolute == true) {
  207. frm.m_sp_monthlyAbsoluteDay.disabled=false;
  208. frm.m_sp_everyNmonthsAbs.disabled=false;
  209. frm.m_sp_monthlyRelativeDay.disabled = true;
  210. frm.m_sp_monthlyRelativeWeek.disabled = true;
  211. frm.m_sp_everyNmonthsRel.disabled=true;
  212. } else {
  213. frm.m_sp_monthlyAbsoluteDay.disabled=true;
  214. frm.m_sp_everyNmonthsAbs.disabled=true;
  215. frm.m_sp_monthlyRelativeDay.disabled = false;
  216. frm.m_sp_monthlyRelativeWeek.disabled = false;
  217. frm.m_sp_everyNmonthsRel.disabled=false;
  218. }
  219. }
  220. function setYearlyAbsolute(absolute) {
  221. var frm = document.pform;
  222. if (absolute == true) {
  223. frm.m_sp_yearlyAbsoluteDay.disabled=false;
  224. frm.m_sp_yearlyAbsoluteMonth.disabled=false;
  225. frm.m_sp_yearlyRelativeDay.disabled = true;
  226. frm.m_sp_yearlyRelativeWeek.disabled = true;
  227. frm.m_sp_yearlyRelativeMonth.disabled=true;
  228. } else {
  229. frm.m_sp_yearlyAbsoluteDay.disabled=true;
  230. frm.m_sp_yearlyAbsoluteMonth.disabled=true;
  231. frm.m_sp_yearlyRelativeDay.disabled = false;
  232. frm.m_sp_yearlyRelativeWeek.disabled = false;
  233. frm.m_sp_yearlyRelativeMonth.disabled=false;
  234. }
  235. }
  236. function getRadioValue(radioGrp) {
  237. var groupSize = radioGrp.length;
  238. for (var i = 0; i < groupSize; i++) {
  239. if (radioGrp[i].checked) {
  240. return radioGrp[i].value;
  241. }
  242. }
  243. //default to the first value
  244. return radioGrp[0].value;
  245. }
  246. function onScheduleChange(evt) {
  247. if (evt) {
  248. var xEvt = new xEvent(evt);
  249. var className = xEvt.target.className;
  250. if (className && regExp.test(className)) {
  251. return; //invalid entry. Don't update
  252. }
  253. }
  254. //Maintain legacy logic
  255. if(window.on_changed_schedule_changed) {
  256. window.on_changed_schedule_changed();
  257. }
  258. }
  259. function switchTab(type) {
  260. page_loading = 'true';
  261. document.pform.switch_frequency.value='true';
  262. document.pform.m_sp_type.value=type;
  263. }
  264. function changeDailyPeriod(target) {
  265. var frm = document.pform;
  266. if (frm.m_sp_everyNminutes) {
  267. frm.m_sp_everyNminutes.disabled = target.value != 'minute';
  268. }
  269. if (frm.m_sp_everyNhours) {
  270. frm.m_sp_everyNhours.disabled = target.value != 'hour';
  271. }
  272. if (frm.m_sp_everyNdays) {
  273. var isEveryXDays = target.value == 'day';
  274. frm.m_sp_everyNdays.disabled = !isEveryXDays;
  275. if (frm.df_intra) {
  276. frm.df_intra.disabled = !isEveryXDays;
  277. if (!isEveryXDays) {
  278. frm.df_intra.checked = false;
  279. }
  280. enableIntraDay(frm.df_intra.checked);
  281. }
  282. }
  283. }
  284. function resetScheduleOwner() {
  285. document.pform.m_schedule_owner_reset.value='true';
  286. }
  287. /*
  288. Prevent the prompting widgets from responding to events.
  289. eg. readonly mode
  290. */
  291. function stopPromptingEventPropogation(evt) {
  292. xStopPropagation(evt);
  293. xPreventDefault(evt);
  294. return false;
  295. }
  296. function enablePrompting(target, isEnabled) {
  297. if (target) {
  298. if (isEnabled) {
  299. if (!isPromptingEnabled) {
  300. timePickerintradayRecurrenceStart.enable();
  301. timePickerintradayRecurrenceEnd.enable();
  302. xRemoveEventListener(target,'keypress',stopPromptingEventPropogation,true);
  303. xRemoveEventListener(target,'click',stopPromptingEventPropogation,true);
  304. xRemoveEventListener(target,'mousedown',stopPromptingEventPropogation,true);
  305. xRemoveEventListener(target,'mouseup',stopPromptingEventPropogation,true);
  306. xRemoveEventListener(target,'dblclick',stopPromptingEventPropogation,true);
  307. xRemoveEventListener(target,'mouseover',stopPromptingEventPropogation,true);
  308. xRemoveEventListener(target,'mouseout',stopPromptingEventPropogation,true);
  309. enablePromptingControls(target, isEnabled);
  310. isPromptingEnabled = true;
  311. }
  312. } else {
  313. if (isPromptingEnabled) {
  314. timePickerintradayRecurrenceStart.disable();
  315. timePickerintradayRecurrenceEnd.disable();
  316. xAddEventListener(target,'keypress',stopPromptingEventPropogation,true);
  317. xAddEventListener(target,'click',stopPromptingEventPropogation,true);
  318. xAddEventListener(target,'mousedown',stopPromptingEventPropogation,true);
  319. xAddEventListener(target,'mouseup',stopPromptingEventPropogation,true);
  320. xAddEventListener(target,'dblclick',stopPromptingEventPropogation,true);
  321. xAddEventListener(target,'mouseover',stopPromptingEventPropogation,true);
  322. xAddEventListener(target,'mouseout',stopPromptingEventPropogation,true);
  323. enablePromptingControls(target, isEnabled);
  324. isPromptingEnabled = false;
  325. }
  326. }
  327. }
  328. }
  329. function enablePromptingControls(target, isEnabled) {
  330. var nodeList = target.getElementsByTagName('*');
  331. for (var i = 0, node; node = nodeList[i]; i++) {
  332. node.disabled = !isEnabled;
  333. }
  334. }
  335. function enableIntraDay(isEnabled) {
  336. if (!(getScheduleInterval()=='trigger') || isScheduleReadOnly()) {
  337. var frm = document.pform;
  338. if (frm.m_sp_intradayRecurrenceIntervalUnit) {
  339. frm.m_sp_intradayRecurrenceIntervalUnit.disabled = !isEnabled
  340. frm.m_sp_intradayRecurrenceIntervalNum.disabled = !isEnabled
  341. enablePrompting(dojo.byId('intradayRecurrenceInterval'),isEnabled);
  342. }
  343. }
  344. }
  345. function onLoadSchedule() {
  346. if (!isScheduleReadOnly() && !isIntraDailyFreq()) {
  347. enableIntraDay(false);
  348. }
  349. if (!isScheduleReadOnly()) {
  350. onScheduleChange();
  351. }
  352. }
  353. function resetScheduleOwner() {
  354. document.pform.m_schedule_owner_reset.value='true';
  355. }
  356. xAddEventListener(window,'load',onLoadSchedule,true);