DatePromptPresets.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. define(function () {
  2. "use strict";
  3. var oPage;
  4. function datePromptPresets() {
  5. };
  6. datePromptPresets.prototype.draw = function (oControlHost) {
  7. oPage = oControlHost.page;
  8. var elDate = oControlHost.container;
  9. elDate.innerHTML =
  10. '<style>' +
  11. '.myButtonDate { height:32px; width:180px; cursor:pointer; margin-left:5px; color:#4178BE; font-size:14px; padding:6px 12px 6px 12px; background-color:white; border:1px solid #4178BE; }' +
  12. '.myButtonDate:hover { background-color:#4178BE; color:white; border:1px solid #4178BE; }' +
  13. '</style>' +
  14. '<button class="myButtonDate btnYesterday" type="button">Yesterday</button>' +
  15. '<button class="myButtonDate btnCurrentYTD" type="button">Current YTD</button>' +
  16. '<button class="myButtonDate btnPreviousMonth" type="button">Previous Month</button>' +
  17. '<button class="myButtonDate btnPreviousYear" type="button">Previous Year</button>';
  18. elDate.querySelector(".btnYesterday").onclick = setDatePreset.bind(null, "Yesterday");
  19. elDate.querySelector(".btnCurrentYTD").onclick = setDatePreset.bind(null, "YTD");
  20. elDate.querySelector(".btnPreviousMonth").onclick = setDatePreset.bind(null, "PreviousMonth");
  21. elDate.querySelector(".btnPreviousYear").onclick = setDatePreset.bind(null, "PreviousYear");
  22. };
  23. function setDatePreset(timeFrame) {
  24. // Calculate the date range start date
  25. var dateRangeStart = calculateRangeStart(timeFrame);
  26. // Calculate the date range end date
  27. var dateRangeEnd = calculateEndDate(dateRangeStart, timeFrame);
  28. // Encode the date range as JSON
  29. var JSONEncodedDates = EncodeDateRangeAsJSON(dateRangeStart, dateRangeEnd);
  30. // Set the Date prompt using the JSON encoded date range
  31. setDatePrompt(JSONEncodedDates);
  32. };
  33. /*
  34. *
  35. * This is the only function that actually uses the prompt JavaScript API using it to perform three operations
  36. * Creates a report object
  37. * Create a prompt object
  38. * Set the prompt values
  39. *
  40. * Function arguments:
  41. * @JSONEncodedDates is a date range with use values range start and end dates
  42. *
  43. */
  44. function setDatePrompt(JSONEncodedDates) {
  45. // Create a prompt object using the prompt name set in Report Studio
  46. var datePrompt = oPage.getControlByName("DatePrompt");
  47. // Set the prompt values using the JSON encoded dates
  48. datePrompt.addValues([JSONEncodedDates]);
  49. };
  50. /*
  51. *
  52. * This function encodes the range start and end use values into as JSON. In other words, into
  53. * JavaScript Literal Notation such as
  54. * { 'start': {'use': '2012-01-08'}, 'end': {'use': '2012-02-08'} }
  55. *
  56. * Function arguments:
  57. * @dateRangeStart - a date object for the range start date
  58. * @dateRangeEnd - a date object for the range end date
  59. *
  60. */
  61. function EncodeDateRangeAsJSON(dateRangeStart, dateRangeEnd) {
  62. // Encode the date range as JSON (JavaScript Literal Notation)
  63. // The following steps will create string representation of the date range start and end dates
  64. // in the format yyyy-mm-dd such as 2012-01-12 for to encode into JSON
  65. // First, get the year, month and day parts of the date range start
  66. var yearPart = dateRangeStart.getFullYear();
  67. var monthPart = dateRangeStart.getMonth() + 1; // Add 1 month for base zero month (Jan = month 0)
  68. var dayPart = dateRangeStart.getDate();
  69. // Second, create the string representation of the date range start
  70. var startDateString = yearPart + "-" + monthPart + "-" + dayPart;
  71. // Third, get the year, month and day parts of the date range end
  72. var yearPart = dateRangeEnd.getFullYear();
  73. var monthPart = dateRangeEnd.getMonth() + 1; // Add 1 month for base zero month (Jan = month 0)
  74. var dayPart = dateRangeEnd.getDate();
  75. // Lastly, create the string representation of the date range end
  76. var endDateString = yearPart + "-" + monthPart + "-" + dayPart;
  77. // Now that we have our dates as strings, encode the date range as JSON (JavaScript Literal Notation)
  78. var JSONEncodedDateRange = {
  79. 'start': {
  80. 'use': startDateString
  81. }, 'end': {
  82. 'use': endDateString
  83. }
  84. };
  85. return JSONEncodedDateRange;
  86. };
  87. /*
  88. *
  89. * This function calculates the date range start date using today's date as the baseline.
  90. *
  91. * Function arguments:
  92. * @timeFrame is a string passed to this function to determine the date range. Valid values are:
  93. * - Yesterday (set range yesterday and today)
  94. * - YTD
  95. * - PreviousMonth
  96. * - PreviousQuarter
  97. * - PreviousYear
  98. */
  99. function calculateRangeStart(timeFrame) {
  100. // Get the system year and month
  101. var currentDate = new Date();
  102. // Extract year, month and day components as numbers from current date
  103. var currentYear = currentDate.getFullYear();
  104. var currentMonth = currentDate.getMonth(); // zero based, January is month 0
  105. var currentDay = currentDate.getDate(); // 1 based
  106. if (timeFrame == "Yesterday") {
  107. // Calculate yesterdays date including determining if yesterday was in a previous Month and/or Year
  108. // If today is not the first day of the month, subtract one day and keep the same month and year
  109. if (currentDay != 1) {
  110. var rangeStartYear = currentYear;
  111. var rangeStartMonth = currentMonth;
  112. var rangeStartDay = currentDay - 1;
  113. } else { // Today is the first day of the month so set month to previous month
  114. if (currentMonth != 0) { // First day of Feb through December
  115. // The Date.setFullYear will return the last day of the previous month if you pass zero as the day
  116. var workingDate = new Date;
  117. workingDate.setFullYear(currentYear, currentMonth, 0);
  118. var rangeStartYear = workingDate.getYear();
  119. var rangeStartMonth = workingDate.getMonth();
  120. var rangeStartDay = workingDate.getDate();
  121. } else { // First day of January
  122. // The Date.setFullYear will return the last day of the previous month if you pass zero as the day
  123. var workingDate = new Date;
  124. workingDate.setFullYear(currentYear, currentMonth, 0);
  125. var rangeStartYear = workingDate.getYear();
  126. var rangeStartMonth = workingDate.getMonth();
  127. var rangeStartDay = workingDate.getDate();
  128. }
  129. }
  130. } else if (timeFrame == "PreviousMonth") {
  131. // Calculate the first day of the previous month based on today's date
  132. // Set Current Month to previous Month (and Current Year as required)
  133. if (currentMonth == 0) { //set month and year to previous december and year
  134. var rangeStartMonth = 11;
  135. var rangeStartYear = currentYear - 1;
  136. } else { // set to previous month in same year
  137. rangeStartMonth = currentMonth - 1;
  138. var rangeStartYear = currentYear;
  139. }
  140. var rangeStartDay = 1; // Always first day of month
  141. } else if (timeFrame == "YTD") {
  142. // Calculate the first day of the year based on today's date
  143. var rangeStartYear = currentYear;
  144. var rangeStartMonth = 0; // Always January
  145. var rangeStartDay = 1; // Always first day of month
  146. } else if (timeFrame == "PreviousQuarter") {
  147. // Calculate the first day of the previous calendar quarter month based on today's date
  148. // Quarters Conversion is:
  149. // Q1 = January to March (Month 0 to 2) >>> October (9) Previous year
  150. // Q2 = April to June (Month 3 to 5) >>> January (Zero) Same year
  151. // Q3 = July to September (Month 6 to 8) >>> April (3) Same year
  152. // Q4 = October to December (Month 9 to 11) >>> July (6) Same year
  153. // Set Quarter and Year
  154. if (currentMonth <= 2) {
  155. var rangeStartMonth = 9; // October
  156. var rangeStartYear = currentYear - 1; // Previous year
  157. } else if (currentMonth <= 5) {
  158. var rangeStartMonth = 0; // January
  159. var rangeStartYear = currentYear; // Same year
  160. } else if (currentMonth <= 8) {
  161. var rangeStartMonth = 3; // April
  162. var rangeStartYear = currentYear; // Same year
  163. } else {
  164. rangeStartMonth = 6; // July
  165. var rangeStartYear = currentYear; // Same year
  166. }
  167. var rangeStartDay = 1; // Always first day of month
  168. } else if (timeFrame == "PreviousYear") {
  169. var rangeStartYear = currentYear - 1;
  170. var rangeStartMonth = 0; // Always January
  171. var rangeStartDay = 1; // Always first day of month
  172. } else {
  173. alert("Invalid Time Frame");
  174. }
  175. var rangeStart = new Date(rangeStartYear, rangeStartMonth, rangeStartDay);
  176. return rangeStart;
  177. };
  178. /*
  179. *
  180. * This function calculates the date range end date based on the passed time frame and start date
  181. *
  182. */
  183. function calculateEndDate(dateRangeStart, timeFrame) {
  184. // Calculate the end of the date range based on the passed time frame
  185. // Extract Year, Month and Day from passed in dateRangeStart
  186. var workingYear = dateRangeStart.getFullYear();
  187. var workingMonth = dateRangeStart.getMonth();
  188. var workingDay = dateRangeStart.getDate();
  189. if (timeFrame == "Yesterday") {
  190. // use today's date
  191. dateRangeEnd = new Date();
  192. } else if (timeFrame == "PreviousMonth") {
  193. // Calculate the last day of the passed month
  194. // The Date.setFullYear will return the last day of the previous month if you pass zero as the day
  195. var dateRangeEnd = new Date;
  196. dateRangeEnd.setFullYear(workingYear, workingMonth + 1, 0);
  197. } else if (timeFrame == "YTD") {
  198. // Calculate the current date
  199. dateRangeEnd = new Date();
  200. } else if (timeFrame == "PreviousQuarter") {
  201. var endMonth = 0;
  202. var endDay = 0;
  203. // Calculate the end of the passed quarter
  204. if (workingMonth == 0) {
  205. endMonth = 2; // March
  206. endDay = 31; // Last day of March = 31
  207. } else if (workingMonth == 3) {
  208. EndMonth = 5; // June
  209. EndDay = 30; // Last day of March = 30
  210. } else if (workingMonth == 6) {
  211. endMonth = 8; // September
  212. endDay = 30; // Last day of March = 30
  213. } else {
  214. endMonth = 11; // December
  215. endDay = 31; // Last day of March = 31
  216. }
  217. dateRangeEnd = new Date(workingYear, endMonth, endDay);
  218. } else if (timeFrame == "PreviousYear") {
  219. var rangeEndYear = workingYear; // Same year as start range
  220. var rangeEndMonth = 11; // Always December
  221. var rangeEndDay = 31; // Always last day of December
  222. dateRangeEnd = new Date(rangeEndYear, rangeEndMonth, rangeEndDay);
  223. } else {
  224. alert("calculateEndDate: Invalid Time Frame");
  225. }
  226. return dateRangeEnd;
  227. };
  228. return datePromptPresets;
  229. });