UNPKG

@openui5/sap.m

Version:

OpenUI5 UI Library sap.m

928 lines (841 loc) 30.1 kB
/*! * OpenUI5 * (c) Copyright 2009-2023 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ // Provides control sap.m.StandardDynamicDateOption. sap.ui.define([ 'sap/ui/core/library', './DynamicDateOption', './Label', './RadioButton', './RadioButtonGroup', 'sap/ui/core/date/UniversalDateUtils', 'sap/ui/core/date/UniversalDate', 'sap/m/DynamicDateValueHelpUIType', './library'], function( coreLibrary, DynamicDateOption, Label, RadioButton, RadioButtonGroup, UniversalDateUtils, UniversalDate, DynamicDateValueHelpUIType, library) { "use strict"; // shortcut for sap.ui.core.VerticalAlign var VerticalAlign = coreLibrary.VerticalAlign; /** * Constructor for a new StandardDynamicDateOption. * * @param {string} [sId] id for the new control, generated automatically if no id is given * @param {object} [mSettings] initial settings for the new control * @param {string} [mSettings.key] One of the predefined keys identifying the standard dynamic date options * * @class * A control base type. * @extends sap.m.DynamicDateOption * * @author SAP SE * @version 1.117.4 * * @private * @alias sap.m.StandardDynamicDateOption */ var StandardDynamicDateOption = DynamicDateOption.extend("sap.m.StandardDynamicDateOption", /** @lends sap.m.StandardDynamicDateOption.prototype */ { metadata: { library: "sap.m", properties: { /** * If set, the calendar week numbering is used for display. * If not set, the calendar week numbering of the global configuration is used. * @since 1.111.0 */ calendarWeekNumbering: { type : "sap.ui.core.date.CalendarWeekNumbering", group : "Appearance", defaultValue: null} } } }); var MIN_VALUE_HELP_INTEGER = 1; var MAX_VALUE_HELP_INTEGER = 6000; var Keys = { "DATE": "DATE", "DATETIME": "DATETIME", "DATERANGE": "DATERANGE", "DATETIMERANGE": "DATETIMERANGE", "TODAY": "TODAY", "YESTERDAY": "YESTERDAY", "TOMORROW": "TOMORROW", "SPECIFICMONTH": "SPECIFICMONTH", "SPECIFICMONTHINYEAR": "SPECIFICMONTHINYEAR", "FIRSTDAYWEEK": "FIRSTDAYWEEK", "LASTDAYWEEK": "LASTDAYWEEK", "FIRSTDAYMONTH":"FIRSTDAYMONTH", "LASTDAYMONTH":"LASTDAYMONTH", "FIRSTDAYQUARTER":"FIRSTDAYQUARTER", "LASTDAYQUARTER":"LASTDAYQUARTER", "FIRSTDAYYEAR":"FIRSTDAYYEAR", "LASTDAYYEAR":"LASTDAYYEAR", "THISWEEK": "THISWEEK", "THISMONTH": "THISMONTH", "THISQUARTER": "THISQUARTER", "THISYEAR": "THISYEAR", "LASTWEEK": "LASTWEEK", "LASTMONTH": "LASTMONTH", "LASTQUARTER": "LASTQUARTER", "LASTYEAR": "LASTYEAR", "NEXTWEEK": "NEXTWEEK", "NEXTMONTH": "NEXTMONTH", "NEXTQUARTER": "NEXTQUARTER", "NEXTYEAR": "NEXTYEAR", "LASTMINUTES": "LASTMINUTES", "LASTHOURS": "LASTHOURS", "LASTDAYS": "LASTDAYS", "LASTWEEKS": "LASTWEEKS", "LASTMONTHS": "LASTMONTHS", "LASTQUARTERS": "LASTQUARTERS", "LASTYEARS": "LASTYEARS", "NEXTMINUTES": "NEXTMINUTES", "NEXTHOURS": "NEXTHOURS", "NEXTDAYS": "NEXTDAYS", "NEXTWEEKS": "NEXTWEEKS", "NEXTMONTHS": "NEXTMONTHS", "NEXTQUARTERS": "NEXTQUARTERS", "NEXTYEARS": "NEXTYEARS", "FROM": "FROM", "TO": "TO", "FROMDATETIME": "FROMDATETIME", "TODATETIME": "TODATETIME", "YEARTODATE": "YEARTODATE", "DATETOYEAR":"DATETOYEAR", "TODAYFROMTO": "TODAYFROMTO", "QUARTER1": "QUARTER1", "QUARTER2": "QUARTER2", "QUARTER3": "QUARTER3", "QUARTER4": "QUARTER4" }; var _Groups = { "SingleDates": 1, "DateRanges": 2, "Weeks": 3, "Months": 4, "Quarters": 5, "Years": 6 }; var _OptionsGroup = { "DATE": _Groups.SingleDates, "DATETIME": _Groups.SingleDates, "DATERANGE": _Groups.DateRanges, "DATETIMERANGE": _Groups.DateRanges, "TODAY": _Groups.SingleDates, "YESTERDAY": _Groups.SingleDates, "TOMORROW": _Groups.SingleDates, "SPECIFICMONTH": _Groups.Months, "SPECIFICMONTHINYEAR": _Groups.Months, "FIRSTDAYWEEK": _Groups.SingleDates, "LASTDAYWEEK": _Groups.SingleDates, "FIRSTDAYMONTH":_Groups.SingleDates, "LASTDAYMONTH":_Groups.SingleDates, "FIRSTDAYQUARTER":_Groups.SingleDates, "LASTDAYQUARTER":_Groups.SingleDates, "FIRSTDAYYEAR":_Groups.SingleDates, "LASTDAYYEAR":_Groups.SingleDates, "THISWEEK": _Groups.Weeks, "THISMONTH": _Groups.Months, "THISQUARTER": _Groups.Quarters, "THISYEAR": _Groups.Years, "LASTWEEK": _Groups.Weeks, "LASTMONTH": _Groups.Months, "LASTQUARTER": _Groups.Quarters, "LASTYEAR": _Groups.Years, "NEXTWEEK": _Groups.Weeks, "NEXTMONTH": _Groups.Months, "NEXTQUARTER": _Groups.Quarters, "NEXTYEAR": _Groups.Years, "LASTMINUTES": _Groups.DateRanges, "LASTHOURS": _Groups.DateRanges, "LASTDAYS": _Groups.DateRanges, "LASTWEEKS": _Groups.DateRanges, "LASTMONTHS": _Groups.DateRanges, "LASTQUARTERS": _Groups.DateRanges, "LASTYEARS": _Groups.DateRanges, "NEXTMINUTES": _Groups.DateRanges, "NEXTHOURS": _Groups.DateRanges, "NEXTDAYS": _Groups.DateRanges, "NEXTWEEKS": _Groups.DateRanges, "NEXTMONTHS": _Groups.DateRanges, "NEXTQUARTERS": _Groups.DateRanges, "NEXTYEARS": _Groups.DateRanges, "FROM": _Groups.DateRanges, "TO": _Groups.DateRanges, "FROMDATETIME": _Groups.DateRanges, "TODATETIME": _Groups.DateRanges, "YEARTODATE": _Groups.DateRanges, "DATETOYEAR": _Groups.DateRanges, "TODAYFROMTO": _Groups.DateRanges, "QUARTER1": _Groups.Quarters, "QUARTER2": _Groups.Quarters, "QUARTER3": _Groups.Quarters, "QUARTER4": _Groups.Quarters }; var aLastOptions = ["LASTMINUTES", "LASTHOURS", "LASTDAYS", "LASTWEEKS", "LASTMONTHS", "LASTQUARTERS", "LASTYEARS"]; var aNextOptions = ["NEXTMINUTES", "NEXTHOURS", "NEXTDAYS", "NEXTWEEKS", "NEXTMONTHS", "NEXTQUARTERS", "NEXTYEARS"]; StandardDynamicDateOption.LastXKeys = aLastOptions; StandardDynamicDateOption.NextXKeys = aNextOptions; var _resourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.m"); StandardDynamicDateOption.Keys = Keys; StandardDynamicDateOption.prototype.exit = function() { if (this.aValueHelpUITypes) { while (this.aValueHelpUITypes.length) { this.aValueHelpUITypes.pop().destroy(); } delete this.aValueHelpUITypes; } }; StandardDynamicDateOption.prototype.getText = function(oControl) { var sKey = this.getKey(); var oOptions = oControl._getOptions(); var aParams = this.getValueHelpUITypes(oControl); var oLastOptionParam = this._getOptionParams(aLastOptions, oOptions); var oNextOptionParam = this._getOptionParams(aNextOptions, oOptions); if (oLastOptionParam) { aParams.push(oLastOptionParam); } if (oNextOptionParam) { aParams.push(oNextOptionParam); } switch (sKey) { case Keys.LASTMINUTES: case Keys.LASTHOURS: case Keys.LASTDAYS: case Keys.LASTWEEKS: case Keys.LASTMONTHS: case Keys.LASTQUARTERS: case Keys.LASTYEARS: case Keys.NEXTMINUTES: case Keys.NEXTHOURS: case Keys.NEXTDAYS: case Keys.NEXTWEEKS: case Keys.NEXTMONTHS: case Keys.NEXTQUARTERS: case Keys.NEXTYEARS: return this._getXPeriodTitle(aParams[1].getOptions()); case Keys.FROMDATETIME: case Keys.TODATETIME: case Keys.DATETIMERANGE: return oControl._findOption(sKey)._bAdditionalTimeText ? _resourceBundle.getText("DYNAMIC_DATE_" + sKey + "_TITLE") + " (" + _resourceBundle.getText("DYNAMIC_DATE_DATETIME_TITLE") + ")" : _resourceBundle.getText("DYNAMIC_DATE_" + sKey + "_TITLE"); default: return _resourceBundle.getText("DYNAMIC_DATE_" + sKey + "_TITLE"); } }; StandardDynamicDateOption.prototype.getValueHelpUITypes = function(oControl) { var sKey = this.getKey(); if (!this.aValueHelpUITypes) { //the empty array is still an initialized value and can be reused switch (sKey) { case Keys.TODAY: case Keys.YESTERDAY: case Keys.TOMORROW: case Keys.FIRSTDAYWEEK: case Keys.LASTDAYWEEK: case Keys.FIRSTDAYMONTH: case Keys.LASTDAYMONTH: case Keys.FIRSTDAYQUARTER: case Keys.LASTDAYQUARTER: case Keys.FIRSTDAYYEAR: case Keys.LASTDAYYEAR: case Keys.THISWEEK: case Keys.THISMONTH: case Keys.THISQUARTER: case Keys.THISYEAR: case Keys.LASTWEEK: case Keys.LASTMONTH: case Keys.LASTQUARTER: case Keys.LASTYEAR: case Keys.NEXTWEEK: case Keys.NEXTMONTH: case Keys.NEXTQUARTER: case Keys.NEXTYEAR: case Keys.YEARTODATE: case Keys.DATETOYEAR: case Keys.QUARTER1: case Keys.QUARTER2: case Keys.QUARTER3: case Keys.QUARTER4: this.aValueHelpUITypes = []; break; case Keys.DATETIME: case Keys.FROMDATETIME: case Keys.TODATETIME: this.aValueHelpUITypes = [ new DynamicDateValueHelpUIType({ type: "datetime" })]; break; case Keys.DATE: case Keys.FROM: case Keys.TO: this.aValueHelpUITypes = [ new DynamicDateValueHelpUIType({ type: "date" })]; break; case Keys.DATERANGE: this.aValueHelpUITypes = [ new DynamicDateValueHelpUIType({ type: "daterange" })]; break; case Keys.SPECIFICMONTH: this.aValueHelpUITypes = [ new DynamicDateValueHelpUIType({ type: "month" })]; break; case Keys.SPECIFICMONTHINYEAR: this.aValueHelpUITypes = [ new DynamicDateValueHelpUIType({ type: "custommonth" })]; break; case Keys.LASTMINUTES: case Keys.LASTHOURS: case Keys.LASTDAYS: case Keys.LASTWEEKS: case Keys.LASTMONTHS: case Keys.LASTQUARTERS: case Keys.LASTYEARS: case Keys.NEXTMINUTES: case Keys.NEXTHOURS: case Keys.NEXTDAYS: case Keys.NEXTWEEKS: case Keys.NEXTMONTHS: case Keys.NEXTQUARTERS: case Keys.NEXTYEARS: this.aValueHelpUITypes = [ new DynamicDateValueHelpUIType({ text: _resourceBundle.getText("DDR_LASTNEXTX_LABEL"), type: "int" })]; break; case Keys.TODAYFROMTO: this.aValueHelpUITypes = [ new DynamicDateValueHelpUIType({ text: _resourceBundle.getText("DDR_TODAYFROMTO_FROM_LABEL"), type: "int", additionalText: _resourceBundle.getText("DDR_TODAYFROMTO_TO_ADDITIONAL_LABEL") }), new DynamicDateValueHelpUIType({ text: _resourceBundle.getText("DDR_TODAYFROMTO_TO_LABEL"), type: "int", additionalText: _resourceBundle.getText("DDR_TODAYFROMTO_TO_ADDITIONAL_LABEL") })]; break; case Keys.DATETIMERANGE: this.aValueHelpUITypes = [ new DynamicDateValueHelpUIType({ text: _resourceBundle.getText("DDR_DATETIMERANGE_FROM_LABEL"), type: "datetime" }), new DynamicDateValueHelpUIType({ text: _resourceBundle.getText("DDR_DATETIMERANGE_TO_LABEL"), type: "datetime" })]; break; } } return this.aValueHelpUITypes.slice(0); }; /** * Creates a UI for this DynamicDateOption. * @param {sap.m.DynamicDateRange} oControl to create the UI for * @param {function} fnControlsUpdated A callback invoked when any of the created controls updates its value * * @return {sap.ui.core.Control[]} Returns an array of controls which is mapped to the parameters of this DynamicDateOption. */ StandardDynamicDateOption.prototype.createValueHelpUI = function(oControl, fnControlsUpdated) { var oOptions = oControl._getOptions(), oValue = oControl.getValue() && Object.assign({}, oControl.getValue()), aParams = this.getValueHelpUITypes(oControl), aControls = [], oCurrentLabel, sCalendarWeekNumbering = oControl.getCalendarWeekNumbering(); if (!oControl.aControlsByParameters) { oControl.aControlsByParameters = {}; } oControl.aControlsByParameters[this.getKey()] = []; var oLastOptionParam = this._getOptionParams(aLastOptions, oOptions), oNextOptionParam = this._getOptionParams(aNextOptions, oOptions); if (oLastOptionParam) { aParams.push(oLastOptionParam); } if (oNextOptionParam) { aParams.push(oNextOptionParam); } if (oValue && oValue.values) { oValue.values = oValue.values.map(function(val) { return val; }); } for (var iIndex = 0; iIndex < aParams.length; iIndex++) { oCurrentLabel = null; if (aParams[iIndex].getOptions() && aParams[iIndex].getOptions().length <= 1) { break; } else if (aParams[ iIndex ].getText()) { oCurrentLabel = new Label({ text: aParams[ iIndex ].getText(), width: "100%" }); aControls.push(oCurrentLabel); } var oInputControl; switch (aParams[iIndex].getType()) { case "int": oInputControl = this._createIntegerControl(oValue, iIndex, fnControlsUpdated); if (oValue && aParams[1] && aParams[1].getOptions() && aParams[1].getOptions().indexOf(oValue.operator.slice(4).toLowerCase()) !== -1) { oInputControl.setValue(oValue.values[iIndex]); } break; case "date": oInputControl = this._createDateControl(oValue, iIndex, fnControlsUpdated, sCalendarWeekNumbering); break; case "datetime": if (aParams.length === 1) { // creates "single" DateTime option (embedded in the DynamicDateRange popup) oInputControl = this._createDateTimeInnerControl(oValue, iIndex, fnControlsUpdated, sCalendarWeekNumbering); } else if (aParams.length === 2) { oInputControl = this._createDateTimeControl(oValue, iIndex, fnControlsUpdated, sCalendarWeekNumbering); } break; case "daterange": oInputControl = this._createDateRangeControl(oValue, iIndex, fnControlsUpdated, sCalendarWeekNumbering); break; case "month": oInputControl = this._createMonthControl(oValue, iIndex, fnControlsUpdated); break; case "custommonth": oInputControl = this._createCustomMonthControl(oValue, iIndex, fnControlsUpdated); break; case "options": oInputControl = this._createOptionsControl(oValue, iIndex, fnControlsUpdated, aParams); break; default: break; } aControls.push(oInputControl); oCurrentLabel && oCurrentLabel.setLabelFor(oInputControl); if (aParams[iIndex].getAdditionalText()) { aControls.push( new Label({ vAlign: VerticalAlign.Bottom, text: aParams[iIndex].getAdditionalText() }).addStyleClass("sapMDDRAdditionalLabel") ); } oControl.aControlsByParameters[this.getKey()].push(oInputControl); } return aControls; }; StandardDynamicDateOption.prototype._createIntegerControl = function(oValue, iIndex, fnControlsUpdated) { var oControl = DynamicDateOption.prototype._createIntegerControl.call(this, oValue, iIndex, fnControlsUpdated); var iMin = this.getKey() === "TODAYFROMTO" ? -MAX_VALUE_HELP_INTEGER : MIN_VALUE_HELP_INTEGER; var bUseDefaultValue = !oValue || this.getKey() !== oValue.operator; if (bUseDefaultValue) { oControl.setValue(1); } oControl.setMin(iMin); oControl.setMax(MAX_VALUE_HELP_INTEGER); return oControl; }; StandardDynamicDateOption.prototype._createOptionsControl = function(oValue, iIndex, fnControlsUpdated, aParameters) { var oControl = new RadioButtonGroup({ buttons: [ aParameters[iIndex].getOptions().map(makeRadioButton) ] }); if (oValue) { var iOptionIndex = aParameters[iIndex].getOptions().indexOf(oValue.operator.slice(4).toLowerCase()); if (iOptionIndex !== -1) { oControl.setSelectedIndex(iOptionIndex); } } if (fnControlsUpdated instanceof Function) { oControl.attachSelect(function() { fnControlsUpdated(this); }, this); } return oControl; }; StandardDynamicDateOption.prototype._getOptionParams = function(aGroupOptions, oOptions){ if (aGroupOptions.indexOf(this.getKey()) !== -1) { return new DynamicDateValueHelpUIType({ text: _resourceBundle.getText("DDR_LASTNEXTX_TIME_PERIODS_LABEL"), type: "options", options: oOptions ? oOptions.filter(function(option) { return aGroupOptions.indexOf(option.getKey()) !== -1; }).map(function(option) { return option.getKey().slice(4).toLowerCase(); }) : [] }); } return undefined; }; /** * Validates all input controls in the value help UI related to the current option. * If one of the input controls contains invalid value, then validation will return <code>false</code>. * If all input controls contain valid value, then the validation will return <code>true</code>. * * @public * @param {sap.m.DynamicDateRange} oControl The control instance * @returns {boolean} value help UI validity indicator */ StandardDynamicDateOption.prototype.validateValueHelpUI = function(oControl) { var aParams = this.getValueHelpUITypes(); for (var i = 0; i < aParams.length; i++) { var oInputControl = oControl.aControlsByParameters[this.getKey()][i]; switch (aParams[i].getType()) { case "int": if (oInputControl._isLessThanMin(oInputControl.getValue()) || oInputControl._isMoreThanMax(oInputControl.getValue())) { return false; } break; case "month": case "custommonth": case "date": case "daterange": if (!oInputControl.getSelectedDates() || oInputControl.getSelectedDates().length == 0) { return false; } break; case "datetime": if (aParams.length === 1) { // validates "single" DateTime option (embedded in the DynamicDateRange popup) if (!oInputControl.getCalendar().getSelectedDates() || oInputControl.getCalendar().getSelectedDates().length == 0) { return false; } } else if (!oInputControl.getDateValue() && aParams.length === 2) { return false; } break; case "options": if (oInputControl.getSelectedIndex() < 0) { return false; } break; default: break; } } return true; }; // Gets the output for each input parameter. // Returns an object { operator: "KEY", values: [] (mapped positionally to each input control) }. StandardDynamicDateOption.prototype.getValueHelpOutput = function(oControl) { var oOptions = oControl._getOptions(); var aParams = this.getValueHelpUITypes(oControl), aResult = {}, vOutput; if (aLastOptions.indexOf(this.getKey()) !== -1 && oControl.aControlsByParameters[this.getKey()].length > 1) { aResult.operator = oOptions.filter(function(option) { return aLastOptions.indexOf(option.getKey()) !== -1; })[oControl.aControlsByParameters[this.getKey()][1].getSelectedIndex()].getKey(); } else if (aNextOptions.indexOf(this.getKey()) !== -1 && oControl.aControlsByParameters[this.getKey()].length > 1) { aResult.operator = oOptions.filter(function(option) { return aNextOptions.indexOf(option.getKey()) !== -1; })[oControl.aControlsByParameters[this.getKey()][1].getSelectedIndex()].getKey(); } else { aResult.operator = this.getKey(); } aResult.values = []; for (var i = 0; i < aParams.length; i++) { var oInputControl = oControl.aControlsByParameters[this.getKey()][i]; switch (aParams[i].getType()) { case "int": vOutput = oInputControl.getValue(); break; case "month": if (!oInputControl.getSelectedDates() || !oInputControl.getSelectedDates().length) { return null; } vOutput = oInputControl.getSelectedDates()[0].getStartDate().getMonth(); break; case "custommonth": if (!oInputControl.getSelectedDates() || !oInputControl.getSelectedDates().length) { return null; } vOutput = [oInputControl.getSelectedDates()[0].getStartDate().getMonth(), oInputControl.getSelectedDates()[0].getStartDate().getFullYear()]; break; case "date": if (!oInputControl.getSelectedDates().length) { return null; } vOutput = oInputControl.getSelectedDates()[0].getStartDate(); break; case "datetime": if (aParams.length === 1) { // "single" DateTime picker (embedded in the DynamicDateRange popup) var oDate, oTimeDate, oCalendar, oClocks; oCalendar = oInputControl.getCalendar(); oClocks = oInputControl.getClocks(); if (!oCalendar.getSelectedDates().length) { return null; } oDate = oCalendar.getSelectedDates()[0].getStartDate(); oTimeDate = oClocks.getTimeValues(); oDate.setHours(oTimeDate.getHours(), oTimeDate.getMinutes(), oTimeDate.getSeconds()); vOutput = oDate; } else if (aParams.length === 2) { if (!oInputControl.getDateValue()) { return null; } vOutput = oInputControl.getDateValue(); } break; case "daterange": if (!oInputControl.getSelectedDates().length) { return null; } var oEndDate = oInputControl.getSelectedDates()[0].getEndDate() || oInputControl.getSelectedDates()[0].getStartDate(); vOutput = [oInputControl.getSelectedDates()[0].getStartDate(), oEndDate]; break; default: break; } if (Array.isArray(vOutput)) { aResult.values = Array.prototype.concat.apply(aResult.values, vOutput); } else { vOutput !== null && vOutput !== undefined && aResult.values.push(vOutput); } } return aResult; }; StandardDynamicDateOption.prototype.getGroup = function() { return _OptionsGroup[this.getKey()]; }; StandardDynamicDateOption.prototype.getGroupHeader = function() { return _resourceBundle.getText("DDR_OPTIONS_GROUP_" + _OptionsGroup[this.getKey()]); }; StandardDynamicDateOption.prototype.format = function(oObj, oFormatter) { return oFormatter.format(oObj, true); }; StandardDynamicDateOption.prototype.parse = function(sValue, oFormatter) { return oFormatter.parse(sValue, this.getKey()); }; StandardDynamicDateOption.prototype.toDates = function(oValue, sCalendarWeekNumbering) { if (!oValue) { return null; } var sKey = oValue.operator; var iParamLastNext = oValue.values[0] || 0; switch (sKey) { case "SPECIFICMONTH": var oDate = new UniversalDate(); oDate.setMonth(oValue.values[0]); oDate = UniversalDateUtils.getMonthStartDate(oDate); return UniversalDateUtils.getRange(0, "MONTH", oDate); case "SPECIFICMONTHINYEAR": var oDate = new UniversalDate(); oDate.setMonth(oValue.values[0]); oDate.setFullYear(oValue.values[1]); oDate = UniversalDateUtils.getMonthStartDate(oDate); return UniversalDateUtils.getRange(0, "MONTH", oDate); case "DATE": return UniversalDateUtils.getRange(0, "DAY", UniversalDate.getInstance(oValue.values[0])); case "DATETIME": var oDateTime = new UniversalDate.getInstance(oValue.values[0]); return [oDateTime, oDateTime]; case "DATERANGE": var oStart = UniversalDate.getInstance(oValue.values[0]); var oEnd = UniversalDate.getInstance(oValue.values[1]); return [UniversalDateUtils.resetStartTime(oStart), UniversalDateUtils.resetEndTime(oEnd)]; case "DATETIMERANGE": var oStart = UniversalDate.getInstance(oValue.values[0]); var oEnd = UniversalDate.getInstance(oValue.values[1]); oStart.setMilliseconds(0); oEnd.setMilliseconds(999); return [oStart, oEnd]; case "TODAY": return UniversalDateUtils.ranges.today(); case "YESTERDAY": return UniversalDateUtils.ranges.yesterday(); case "TOMORROW": return UniversalDateUtils.ranges.tomorrow(); case "FIRSTDAYWEEK": return UniversalDateUtils.ranges.firstDayOfWeek(sCalendarWeekNumbering); case "LASTDAYWEEK": return UniversalDateUtils.ranges.lastDayOfWeek(sCalendarWeekNumbering); case "FIRSTDAYMONTH": return UniversalDateUtils.ranges.firstDayOfMonth(); case "LASTDAYMONTH": return UniversalDateUtils.ranges.lastDayOfMonth(); case "FIRSTDAYQUARTER": return UniversalDateUtils.ranges.firstDayOfQuarter(); case "LASTDAYQUARTER": return UniversalDateUtils.ranges.lastDayOfQuarter(); case "FIRSTDAYYEAR": return UniversalDateUtils.ranges.firstDayOfYear(); case "LASTDAYYEAR": return UniversalDateUtils.ranges.lastDayOfYear(); case "THISWEEK": return UniversalDateUtils.ranges.currentWeek(sCalendarWeekNumbering); case "THISMONTH": return UniversalDateUtils.ranges.currentMonth(); case "THISQUARTER": return UniversalDateUtils.ranges.currentQuarter(); case "THISYEAR": return UniversalDateUtils.ranges.currentYear(); case "LASTWEEK": return UniversalDateUtils.ranges.lastWeek(sCalendarWeekNumbering); case "LASTMONTH": return UniversalDateUtils.ranges.lastMonth(); case "LASTQUARTER": return UniversalDateUtils.ranges.lastQuarter(); case "LASTYEAR": return UniversalDateUtils.ranges.lastYear(); case "NEXTWEEK": return UniversalDateUtils.ranges.nextWeek(sCalendarWeekNumbering); case "NEXTMONTH": return UniversalDateUtils.ranges.nextMonth(); case "NEXTQUARTER": return UniversalDateUtils.ranges.nextQuarter(); case "NEXTYEAR": return UniversalDateUtils.ranges.nextYear(); case "LASTMINUTES": return UniversalDateUtils.ranges.lastMinutes(iParamLastNext); case "LASTHOURS": return UniversalDateUtils.ranges.lastHours(iParamLastNext); case "LASTDAYS": return UniversalDateUtils.ranges.lastDays(iParamLastNext); case "LASTWEEKS": return UniversalDateUtils.ranges.lastWeeks(iParamLastNext, sCalendarWeekNumbering); case "LASTMONTHS": return UniversalDateUtils.ranges.lastMonths(iParamLastNext); case "LASTQUARTERS": return UniversalDateUtils.ranges.lastQuarters(iParamLastNext); case "LASTYEARS": return UniversalDateUtils.ranges.lastYears(iParamLastNext); case "NEXTMINUTES": return UniversalDateUtils.ranges.nextMinutes(iParamLastNext); case "NEXTHOURS": return UniversalDateUtils.ranges.nextHours(iParamLastNext); case "NEXTDAYS": return UniversalDateUtils.ranges.nextDays(iParamLastNext); case "NEXTWEEKS": return UniversalDateUtils.ranges.nextWeeks(iParamLastNext, sCalendarWeekNumbering); case "NEXTMONTHS": return UniversalDateUtils.ranges.nextMonths(iParamLastNext); case "NEXTQUARTERS": return UniversalDateUtils.ranges.nextQuarters(iParamLastNext); case "NEXTYEARS": return UniversalDateUtils.ranges.nextYears(iParamLastNext); case "FROM": return [UniversalDate.getInstance(oValue.values[0])]; case "TO": return [UniversalDate.getInstance(oValue.values[0])]; case "FROMDATETIME": var oDate = UniversalDate.getInstance(oValue.values[0]); oDate.setMilliseconds(0); return [oDate]; case "TODATETIME": var oDate = UniversalDate.getInstance(oValue.values[0]); oDate.setMilliseconds(999); return [oDate]; case "YEARTODATE": return UniversalDateUtils.ranges.yearToDate(); case "DATETOYEAR": return UniversalDateUtils.ranges.dateToYear(); case "TODAYFROMTO": if (oValue.values.length !== 2) { return []; } var xDays = oValue.values[0]; var yDays = oValue.values[1]; var oStart = xDays >= 0 ? UniversalDateUtils.ranges.lastDays(xDays)[0] : UniversalDateUtils.ranges.nextDays(-xDays)[1]; var oEnd = yDays >= 0 ? UniversalDateUtils.ranges.nextDays(yDays)[1] : UniversalDateUtils.ranges.lastDays(-yDays)[0]; if (oStart.oDate.getTime() > oEnd.oDate.getTime()) { oEnd = [oStart, oStart = oEnd][0]; } return [UniversalDateUtils.resetStartTime(oStart), UniversalDateUtils.resetEndTime(oEnd)]; case "QUARTER1": return UniversalDateUtils.ranges.quarter(1); case "QUARTER2": return UniversalDateUtils.ranges.quarter(2); case "QUARTER3": return UniversalDateUtils.ranges.quarter(3); case "QUARTER4": return UniversalDateUtils.ranges.quarter(4); default: return []; } }; StandardDynamicDateOption.prototype.enhanceFormattedValue = function() { switch (this.getKey()) { case "TODAY": case "YESTERDAY": case "TOMORROW": case "FIRSTDAYWEEK": case "LASTDAYWEEK": case "FIRSTDAYMONTH": case "LASTDAYMONTH": case "FIRSTDAYQUARTER": case "LASTDAYQUARTER": case "FIRSTDAYYEAR": case "LASTDAYYEAR": case "THISWEEK": case "THISMONTH": case "THISQUARTER": case "THISYEAR": case "LASTWEEK": case "LASTMONTH": case "LASTQUARTER": case "LASTYEAR": case "NEXTWEEK": case "NEXTMONTH": case "NEXTQUARTER": case "NEXTYEAR": case "YEARTODATE": case "DATETOYEAR": case "QUARTER1": case "QUARTER2": case "QUARTER3": case "QUARTER4": return true; default: return false; } }; /** * Gets a combined option title for the last x or the next x option. * * @param {*} aOptions A combination of the following string values: days, weeks, months, quarters, years * @returns {string} A combined option title * @private */ StandardDynamicDateOption.prototype._getXPeriodTitle = function(aOptions) { var sCombinedOptions, sKey = this.getKey(); if (aOptions.length === 1) { return _resourceBundle.getText("DYNAMIC_DATE_" + sKey + "_TITLE"); } sCombinedOptions = aOptions.map(function(sOption) { return _resourceBundle.getText("DYNAMIC_DATE_" + sOption.toUpperCase()); }).join(" / "); if (sKey.indexOf("LAST") === 0) { return _resourceBundle.getText("DYNAMIC_DATE_LASTX_TITLE", sCombinedOptions); } if (sKey.indexOf("NEXT") === 0) { return _resourceBundle.getText("DYNAMIC_DATE_NEXTX_TITLE", sCombinedOptions); } }; function makeRadioButton(sOptionName) { return new RadioButton({ text: _resourceBundle.getText("DYNAMIC_DATE_" + sOptionName.toUpperCase()) }); } return StandardDynamicDateOption; });