123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- /*
- * Licensed Materials - Property of IBM
- *
- * IBM Cognos Products: SHARE
- *
- * (C) Copyright IBM Corp. 2015, 2017
- *
- * US Government Users Restricted Rights - Use, duplication or disclosure
- * restricted by GSA ADP Schedule Contract with IBM Corp.
- */
- define([
- 'bi/schedule/views/CadencePickerView',
- 'bi/schedule/app/appControler',
- 'jquery',
- 'bi/sharecommon/utils/translator',
- 'q',
- 'momentjs',
- 'bi/sharecommon/utils/simpledoT',
- 'text!bi/schedule/templates/DailyIntervalCadencePicker.html',
- 'underscore',
- 'bi/commons/ui/widgets/TimePicker',
- 'bi/commons/ui/properties/CheckBox',
- 'bi/commons/ui/properties/DropDown',
- 'bi/commons/utils/DateTimeUtils',
- 'bi/content_apps/utils/GlassContextHelper'
- ], function(View, controler, $, t, Q, moment, dot, template, _, TimePicker, CheckBox, DropDown, DateTimeUtils, GlassContextHelper) {
- 'use strict';
- var dailyInterval = View.extend({
- /**
- * @constructor
- */
- init: function(options) {
- dailyInterval.inherited('init', this, arguments);
- _.extend(this, options);
- this.descriptor = this.objectInformation.descriptor;
- this.isEditMode = typeof (this.descriptor) !== "undefined";
- this.dailyIntervalCheckbox = null;
- this.uniqueId = _.uniqueId();
- this.frequencyTypeSelector = null;
- this.renderDailyIntervalCheckbox = false;
- this.timezone = GlassContextHelper.getUserPreference(this.glassContext, 'timeZoneID');
- this.locale = this._determineDateLocale();
- },
- /**
- * Render the new schedule view intraday picker section
- *
- */
- render: function() {
- var deferred = Q.defer();
- var htmlGenerator = dot.simpleTemplate(template);
- var defaultPeriod = 1;
- if(this.isEditMode && this.descriptor.intradayRecurrence) {
- // PT3H
- var text = this.descriptor.intradayRecurrence.intradayRecurrenceInterval;
- defaultPeriod = text.substring(2, text.length - 1);
- }
- var attributes = {
- daily_time_interval_label: t.translate("daily_time_interval_label"),
- schedule_repeat_label: t.translate("schedule_repeat_label"),
- schedule_time_dropdown_hours_t: t.translate("schedule_time_dropdown_hours_t"),
- schedule_time_dropdown_minutes_t: t.translate("schedule_time_dropdown_minutes_t"),
- schedule_timepicker_label: t.translate("schedule_timepicker_label"),
- schedule_timepicker_start: t.translate("period_start_time_label"),
- schedule_timepicker_end: t.translate("period_end_time_label"),
- defaultPeriod: defaultPeriod,
- uniqueid: this.uniqueId
- };
- this.$el.append(htmlGenerator(attributes));
- if((this.glassContext.hasCapability("canUseSchedulingByHour") ||
- this.glassContext.hasCapability("canUseSchedulingByMinute")) &&
- this.objectInformation.showDailyIntervalCheckbox) {
- this.renderDailyIntervalCheckbox = true;
- }
- if(this.renderDailyIntervalCheckbox) {
- this._renderDailyIntervalCheckbox();
- this._renderDailyIntervalTimePickers();
- this._renderSelectors();
- }
- if(this.isEditMode) {
- if(this.descriptor.scheduleInfo && this.descriptor.scheduleInfo.intradayRecurrence &&
- this.renderDailyIntervalCheckbox) {
- this.$el.find(".schedule_dailyinterval").slideDown();
- // repeat value
- var rtext = this.descriptor.scheduleInfo.intradayRecurrence.intradayRecurrenceInterval;
- var repeat = rtext.replace(/[^0-9]/g, '');
- this.$el.find(".schedule_run_every_input").val(repeat);
- // recurrence val
- var recurrence = rtext.charAt(rtext.length - 1);
- this.frequencyTypeSelector.getHTMLControl().val(recurrence);
- }
- } else {
- if (this.renderDailyIntervalCheckbox) {
- // We have either ByHour or ByMinute capability to show the radio button group
- if(this.glassContext.hasCapability("canUseSchedulingByHour")) {
- this.frequencyTypeSelector.getHTMLControl().val('H');
- }
- else {
- this.frequencyTypeSelector.getHTMLControl().val('M');
- }
- }
- }
- this._setEvents();
- deferred.resolve(this);
- return deferred.promise;
- },
- _setEvents: function() {
- $('.schedule_run_every_input').on('input', function(event) {
- this.value = this.value.replace(/[^0-9]/g, '');
- });
- },
- /**
- * All views should overwrite this function. It takes a partially
- * populated json schedule descriptor and adds to it based on the
- * properties of this view.
- *
- * @param desc the partial JSON schedule descriptor
- * @returns the descriptor passed in, with added attributes.
- */
- toDescriptor: function(desc) {
- if (this.renderDailyIntervalCheckbox && this.dailyIntervalCheckbox.isChecked()) {
- var repeat = this.frequencyTypeSelector.getHTMLControl().val();
- var recurrence = this.$el.find(".schedule_run_every_input").val();
- var intradayRecurrenceStart = this.intervalStartTime.getTime24H();
- var intradayRecurrenceEnd = this.intervalEndTime.getTime24H();
- desc.intradayRecurrence = {
- intradayRecurrenceInterval: "PT" + recurrence + repeat, // PT3H
- intradayRecurrenceStart: intradayRecurrenceStart,
- intradayRecurrenceEnd: intradayRecurrenceEnd
- };
- }
- return desc;
- },
- validate: function(msgs) {
- if (this.renderDailyIntervalCheckbox && this.dailyIntervalCheckbox.isChecked()) {
- var parameters = {
- param1: "",
- param2: "",
- param3: ""
- };
- var $everyDiv = this.$el.find(".schedule_dailyinterval_controls_container");
- var $iStartTime = this.$el.find(".schedule_time_interval_start");
- var $iEndTime = this.$el.find(".schedule_time_interval_end");
- $everyDiv.removeAttr('aria-invalid aria-describedby');
- $iStartTime.removeAttr('aria-invalid aria-describedby');
- $iEndTime.removeAttr('aria-invalid aria-describedby');
- var recurrence = parseInt(this.$el.find(".schedule_run_every_input").val(), 10);
- if(isNaN(recurrence) || recurrence === 0) {
- parameters.param1 = t.translate("daily_time_interval_label");
- parameters.param2 = t.translate("schedule_repeat_label");
- msgs.push(t.translate("schedule_invalid_form_input", parameters));
- $everyDiv.attr({
- 'aria-invalid': 'true',
- 'aria-describedby': msgs[0]
- });
- } else if(!this.intervalStartTime.isValidTime()) {
- parameters.param1 = t.translate("daily_time_interval_label");
- parameters.param2 = t.translate("schedule_timepicker_label");
- parameters.param3 = t.translate("period_start_label");
- msgs.push(t.translate("schedule_invalid_interval_time", parameters));
- $iStartTime.attr({
- 'aria-invalid': 'true',
- 'aria-describedby': msgs[0]
- });
- } else if(!this.intervalEndTime.isValidTime()) {
- parameters.param1 = t.translate("daily_time_interval_label");
- parameters.param2 = t.translate("schedule_timepicker_label");
- parameters.param3 = t.translate("period_end_label");
- msgs.push(t.translate("schedule_invalid_interval_time", parameters));
- $iEndTime.attr({
- 'aria-invalid': 'true',
- 'aria-describedby': msgs[0]
- });
- } else if(this.intervalStartTime.isValidTime() && this.intervalEndTime.isValidTime()) {
- var startingTime = new Date(this.intervalStartTime.getDateTimeUTC());
- var endingTime = new Date(this.intervalEndTime.getDateTimeUTC());
- if(startingTime > endingTime) {
- parameters.param1 = t.translate("daily_time_interval_label");
- parameters.param2 = t.translate("schedule_timepicker_label");
- msgs.push(t.translate("schedule_invalid_time_range", parameters));
- $iEndTime.attr({
- 'aria-invalid': 'true',
- 'aria-describedby': msgs[0]
- });
- }
- }
- }
- return msgs;
- },
- _renderDailyIntervalCheckbox: function() {
- var checked = false;
- if(this.descriptor && this.descriptor.scheduleInfo && this.descriptor.scheduleInfo.intradayRecurrence) {
- checked = true;
- }
- this.dailyIntervalCheckbox = new CheckBox({
- 'id': 'schedule_daily_interval_cadence_picker',
- 'el': this.$el.find('#schedule_daily_interval_cadence_picker_container_' + this.uniqueId),
- 'name': 'schedule_daily_pick',
- 'label': t.translate("daily_time_interval_label"),
- 'ariaLabel': t.translate("daily_time_interval_label"),
- 'checked': checked,
- 'controlOnLeft': true,
- 'readOnly': this.readOnly,
- 'onChange': this._toggleOption.bind(this)
- });
- this.dailyIntervalCheckbox.doRender();
- },
- _renderDailyIntervalTimePickers: function() {
- this.intervalStartTime = new TimePicker({
- $el: this.$el.find(".schedule_time_interval_start"),
- timezone: this.timezone,
- ariaLabel: t.translate("period_start_time_label"),
- attributes: {
- showMeridian: !DateTimeUtils.is24HrFormat(this.locale)
- }
- });
- this.intervalStartTime.render();
- this.intervalEndTime = new TimePicker({
- $el: this.$el.find(".schedule_time_interval_end"),
- timezone: this.timezone,
- ariaLabel: t.translate("period_end_time_label"),
- attributes: {
- showMeridian: !DateTimeUtils.is24HrFormat(this.locale)
- }
- });
- this.intervalEndTime.render();
- if(this.isEditMode) {
- if(this.descriptor.scheduleInfo && this.descriptor.scheduleInfo.intradayRecurrence) {
- var startingTime = this.descriptor.scheduleInfo.intradayRecurrence.intradayRecurrenceStart;
- this.intervalStartTime.setTime24H(startingTime);
- var endTime = this.descriptor.scheduleInfo.intradayRecurrence.intradayRecurrenceEnd;
- this.intervalEndTime.setTime24H(endTime);
- }
- }
- },
- _toggleOption: function(name, value) {
- if( value === true ) {
- this.$el.find(".schedule_dailyinterval").slideDown();
- } else {
- this.$el.find(".schedule_dailyinterval").slideUp();
- }
- },
- _renderSelectors: function() {
- var mnOptions = [];
- if(this.glassContext.hasCapability("canUseSchedulingByHour")) {
- mnOptions.push({
- 'label': t.translate("schedule_time_dropdown_hours_t"),
- 'value': 'H',
- 'selected': false
- });
- }
- if(this.glassContext.hasCapability("canUseSchedulingByMinute")) {
- mnOptions.push({
- 'label': t.translate("schedule_time_dropdown_minutes_t"),
- 'value': 'M',
- 'selected': false
- });
- }
- this.frequencyTypeSelector = new DropDown({
- 'id': 'schedule_cadence_id_' + this.uniqueId,
- 'el': this.$el.find('#schedule_daily_time_interval_selector_container_' + this.uniqueId),
- 'ariaLabel': t.translate("schedule_repeat_label"),
- 'name': 'schedule_interval_repeat_type',
- 'responsive': false,
- 'onChange': function() {
- return;
- },
- 'options': mnOptions
- });
- this.frequencyTypeSelector.doRender();
- },
- _determineDateLocale: function() {
- var prodLocale = GlassContextHelper.getUserPreference(this.glassContext, 'productLocale');
- var contentLocale = GlassContextHelper.getUserPreference(this.glassContext, 'contentLocale');
- if(prodLocale === contentLocale.substring(0,2)) {
- return contentLocale;
- } else {
- return prodLocale;
- }
- }
- });
- return dailyInterval;
- });
|