- /**
- * @namespace flexygo.ui.wc
- */
- var flexygo;
- (function (flexygo) {
- var ui;
- (function (ui) {
- var wc;
- (function (wc) {
- /**
- * Library for the FlxScheduler web component.
- *
- * @class FlxScheduler
- * @constructor
- * @return {FlxScheduler}
- */
- class FlxScheduler extends HTMLElement {
- constructor() {
- //If a constructor is defined, is REQUIRED call the super constructor
- super();
- this.objects = new Array();
- this.checkObjects = new Array();
- /**
- * Set when component is attached to DOM
- * @property connected {boolean}
- */
- this.connected = false;
- this.moduleName = null;
- this.n = 0;
- this.additionalWhere = null;
- this.dayClick = false;
- this.events = new Array();
- this.allDay = false;
- this.eventsRefresh = true;
- this.hasPendingRefresh = false;
- }
- /**
- * Array of observed attributes.
- * @property observedAttributes {Array}
- */
- static get observedAttributes() {
- return ['ObjectName', 'ObjectWhere', 'ModuleName'];
- }
- /**
- * Refresh de webcomponent.
- * @method refresh
- */
- connectedCallback() {
- let element = $(this);
- this.connected = true;
- this.objectName = element.attr("ObjectName");
- this.objectWhere = element.attr("ObjectWhere");
- this.moduleName = element.attr("ModuleName");
- if (element.attr('manualInit') != 'true') {
- this.init();
- }
- }
- /**
- * Init the webcomponent.
- * @method init
- */
- init() {
- let ctx = this;
- let me = $(this);
- let activeMode;
- let SQLValueField;
- let SQLDisplayField;
- let SQLFilterField;
- let directTemplate;
- let objectName;
- let viewName;
- let maxTime;
- let minTime;
- let onClickEvent;
- let tokenDefault;
- let allDaySlot;
- let slotDuration;
- let pageType;
- let target;
- let eventLimit;
- me.removeAttr('manualInit');
- let parentModule = me.closest('flx-module');
- let wcModule = parentModule[0];
- if (parentModule && wcModule) {
- wcModule.moduleLoaded(this);
- }
- let options = new Array();
- let schedulerParams = {
- ModuleName: ctx.moduleName
- };
- flexygo.ajax.post('~/api/Scheduler', 'GetSchedulerTemplate', schedulerParams, (response) => {
- if (response) {
- activeMode = response.ActiveMode;
- SQLValueField = response.SQLValueField;
- SQLDisplayField = response.SQLDisplayField;
- SQLFilterField = response.SQLFilterField;
- directTemplate = response.DirectTemplate;
- objectName = response.ObjectName;
- viewName = response.ViewName;
- maxTime = response.MaxTime;
- minTime = response.MinTime;
- onClickEvent = response.OnClickEvent;
- tokenDefault = response.TokenDefault;
- allDaySlot = response.AllDaySlot;
- slotDuration = response.SlotDuration;
- pageType = response.PageType;
- target = response.Target;
- eventLimit = response.EventLimit;
- if (response.MonthView == "True") {
- options.push("month");
- }
- if (response.AgendaWeekView == "True") {
- options.push("agendaWeek");
- }
- if (response.AgendaDayView == "True") {
- options.push("agendaDay");
- }
- if (response.ListWeekView == "True") {
- options.push("listWeek");
- }
- var objectParams = {
- Scheduler: response.SchedulerName
- };
- //Distintos objetos
- flexygo.ajax.post('~/api/Scheduler', 'GetSchedulerConfig', objectParams, (response) => {
- if (response) {
- me.append('<div id="loading"></div><div id="calendar" style="margin:1%;"></div>');
- for (var i in response) {
- ctx.objects.push({
- SchedulerName: response[i].SchedulerName,
- ObjectName: response[i].ObjectName,
- StartDateField: response[i].StartDateField,
- EndDateField: response[i].EndDateField,
- EndTimeField: response[i].EndTimeField,
- StartTimeField: response[i].StartTimeField,
- DurationField: response[i].DurationField,
- ViewName: response[i].ViewName,
- ColorField: response[i].ColorField,
- DescripTemplate: response[i].DescripTemplate,
- key: response[i].key,
- table: response[i].table,
- Icon: response[i].Icon,
- UserIdField: response[i].UserIdField,
- Filter: "",
- TextColorField: response[i].TextColorField,
- TokenDefault: tokenDefault,
- CanInsert: response[i].CanInsert,
- CanView: response[i].CanView,
- CanEdit: response[i].CanEdit,
- AllDayField: response[i].AllDayField
- });
- ctx.checkObjects.push(response[i].ObjectName);
- }
- if (ctx.objects.length > 0) {
- ctx.render(options, activeMode, maxTime, minTime, onClickEvent, allDaySlot, slotDuration, pageType, target, eventLimit);
- //$('.fc-left').addClass('col-lg-5');
- //$('.fc-left').addClass('col-md-6');
- if (objectName != '') {
- $('#calendar').prepend('<div class="fc-toolbar fc-header-toolbar filter"><div class="a" style="text-align:left;" id="filters"><flx-multicombo class="combo" ObjectName="' + objectName + '" ViewName="' + viewName + '" IconClass="flx-icon icon-role" SQLValueField="' + SQLValueField + '" SQLDisplayField="' + SQLDisplayField + '" SQLFilter="' + SQLFilterField + '" filtertype="dbcombo"><template>' + directTemplate + '</template></flx-multicombo></div></div>');
- //$('.fc-left').append('<div id="filters"><flx-multicombo style="width:250px" ObjectName="' + objectName + '" ViewName="' + viewName + '" IconClass="flx-icon icon-role" SQLValueField="' + SQLValueField + '" SQLDisplayField="' + SQLDisplayField + '" filtertype="dbcombo"><template>' + directTemplate + '</template></flx-multicombo></div>');
- $('.fc-left').css("margin-left", "10px");
- }
- if (ctx.objects.length > 1) {
- $('.fc-left').append("<div style='margin-right: .75em;' class='fc-button'><div style='width: 140px;'><div class='panel panel-default objects' style='margin-bottom: 0px;background-color: #f5f5f5;'><div style='padding: 3.5px 10px;'><div><div class='fa fa-filter'></div><a data-toggle='collapse' href='#collapse1' style='color: #777;'> " + flexygo.localization.translate('flxscheduler.objects') + "</a></div></div><div id='collapse1' class='panel-collapse collapse'></div></div></div></div>");
- for (var x = 0; x < ctx.objects.length; x++) {
- $('#collapse1').append("<div class='panel-footer'><i style='float:left;margin-top: 2px;margin-right: 5px;' class='" + ctx.objects[x].Icon + "'></i>" + ctx.objects[x].ObjectName + "<flx-check style='float:right;' id='" + ctx.objects[x].ObjectName + "' property='" + ctx.objects[x].ObjectName + "' checked></flx-check>");
- }
- $('#collapse1').on('show.bs.collapse', function () {
- $(".objects").css("position", "absolute");
- //$(".fc-left").addClass("margin-filter");
- });
- $('#collapse1').on('hide.bs.collapse', function () {
- $(".objects").css("position", "static");
- //$(".fc-left").removeClass("margin-filter");
- });
- $('#mainContent').on('scroll', function () {
- $("#collapse1").removeClass("in");
- $(".objects").css("position", "static");
- });
- //Cambiar por me.find
- $("flx-check input[type=checkbox]").click(function () {
- if (this.checked) {
- ctx.checkObjects.push(this.parentElement.parentElement.id);
- }
- else {
- for (var i in ctx.checkObjects) {
- if (ctx.checkObjects[i] == this.parentElement.parentElement.id) {
- ctx.checkObjects.splice(ctx.checkObjects.indexOf(ctx.checkObjects[i]), 1);
- }
- }
- }
- if (ctx.checkObjects.length != 0) {
- ctx.checkPanelObjects(ctx.additionalWhere);
- }
- else {
- var myCalendar = me.find('#calendar');
- myCalendar.fullCalendar('removeEvents');
- }
- });
- }
- }
- else {
- me.append('<div class="box-danger"><i class="flx-icon icon-close icon-lg icon-margin-right"></i><span><strong>Error</strong> No scheduler objects configurations are found</span></div>');
- }
- $('flx-multicombo[viewname="' + viewName + '"]').find('div').on('change', function () {
- let filtros = this.closest('flx-multicombo').getValue();
- let where = '';
- for (var i in ctx.checkObjects) {
- ctx.objects[i].Filter = filtros.split('|').join('\',\'');
- }
- ctx.checkPanelObjects(ctx.additionalWhere);
- });
- }
- });
- }
- });
- }
- /**
- * Refresh de webcomponent.
- * @method refresh
- */
- refresh() {
- if ($(this).attr('manualInit') != 'true') {
- let ctx = this;
- if (ctx.eventsRefresh) {
- let me = $(this);
- var myCalendar = me.find('#calendar');
- myCalendar.fullCalendar('removeEvents');
- ctx.checkPanelObjects(this.additionalWhere);
- }
- else {
- ctx.hasPendingRefresh = true;
- }
- }
- }
- /**
- * Initialize Scheduler.
- * @method render
- */
- render(options, activeMode, maxTime, minTime, onClickEvent, allDaySlot, slotDuration, pageType, target, eventLimit) {
- let ctx = this;
- let me = $(this);
- let right = '';
- let navLinks = false;
- let defaultDate;
- flexygo.events.on(this, "dialog", "closed", (e) => {
- for (var i = 0; i < ctx.objects.length; i++) {
- if (e.sender.objectname && e.sender.objectname.toLowerCase() === ctx.objects[i].ObjectName.toLowerCase()) {
- ctx.checkPanelObjects(ctx.additionalWhere);
- }
- }
- });
- if (options.indexOf("agendaDay") > -1) {
- navLinks = true;
- }
- for (var i in options) {
- right += options[i] + ',';
- }
- right = right.substring(0, right.length - 1);
- let myCalendar = me.find('#calendar');
- if (minTime == '') {
- minTime = '00:00:00';
- }
- else {
- minTime += ':00';
- }
- if (maxTime == '') {
- maxTime = '24:00:00';
- }
- else {
- maxTime += ':00';
- }
- if (slotDuration == '') {
- slotDuration = '00:30:00';
- }
- else {
- slotDuration += ':00';
- }
- if (allDaySlot == "True") {
- ctx.allDay = true;
- }
- if (me.attr('dateInit')) {
- defaultDate = new Date($(this).attr('dateInit'));
- }
- else {
- defaultDate = Date.now();
- }
- //Calendario//
- myCalendar.fullCalendar({
- header: {
- left: 'prev,next today',
- center: 'title',
- right: right
- },
- firstDay: 1,
- locale: flexygo.profiles.langKey.toLowerCase().slice(0, 2),
- allDaySlot: ctx.allDay,
- defaultDate: defaultDate,
- defaultView: activeMode,
- timeFormat: 'HH:mm',
- nextDayThreshold: '00:00:00',
- minTime: minTime,
- maxTime: maxTime,
- navLinks: navLinks,
- height: 'auto',
- slotEventOverlap: false,
- editable: true,
- eventLimit: eventLimit,
- slotDuration: slotDuration,
- eventDrop: function (event, delta, revertFunc) {
- let obj = new flexygo.obj.Entity(event.objectName, ctx.getObjectWhere(event.table, event.key, event.id));
- obj.read();
- if (event.startDate != '' && event.start != null) {
- obj.data[event.startDate].Value = event.start.format();
- }
- if (event.endDate != '' && event.end != null) {
- if (event.allDay && ctx.allDay) {
- var date = moment(event.end.format()).add('days', -1).format("YYYY-MM-DD");
- obj.data[event.endDate].Value = date + " 23:59:00";
- }
- else {
- obj.data[event.endDate].Value = event.end.format();
- }
- }
- if (event.startTime != '' && event.start != null) {
- if (event.allDay && ctx.allDay) {
- obj.data[event.startTime].Value = "00:00";
- }
- else {
- obj.data[event.startTime].Value = event.start.format().slice(11, 16);
- }
- }
- if (event.endTime != '' && event.end != null) {
- if (event.allDay && ctx.allDay) {
- obj.data[event.endTime].Value = "23:59";
- }
- else {
- obj.data[event.endTime].Value = event.end.format().slice(11, 16);
- }
- }
- if (obj.update()) {
- flexygo.msg.success('Saved');
- }
- },
- eventResize: function (event, delta, revertFunc) {
- let obj = new flexygo.obj.Entity(event.objectName, ctx.getObjectWhere(event.table, event.key, event.id));
- obj.read();
- if (event.endDate != '' && event.end != null) {
- if (event.allDay && ctx.allDay) {
- var date = moment(event.end.format()).add('days', -1).format("YYYY-MM-DD");
- obj.data[event.endDate].Value = date + " 23:59:00";
- }
- else {
- obj.data[event.endDate].Value = event.end.format();
- }
- }
- if (event.endTime != '' && event.end != null) {
- if (event.allDay && ctx.allDay) {
- obj.data[event.endTime].Value = "23:59";
- }
- else {
- obj.data[event.endTime].Value = event.end.format().slice(11, 16);
- }
- }
- if (event.duration != '') {
- let start = new Date(event.start.format()).getTime();
- let end = new Date(event.end.format()).getTime();
- let diffMs = (end - start);
- let diffMins = Math.round(diffMs / 60000);
- obj.data[event.duration].Value = diffMins;
- }
- if (obj.update()) {
- flexygo.msg.success('Saved');
- }
- },
- eventClick: function (calEvent, jsEvent, view) {
- if (onClickEvent == "True") {
- if (pageType == "view" && calEvent.canView) {
- flexygo.nav.openPage(pageType, calEvent.objectName, ctx.getObjectWhere(calEvent.table, calEvent.key, calEvent.id), null, target, false, $(this));
- }
- if (pageType == "edit" && calEvent.canEdit) {
- flexygo.nav.openPage(pageType, calEvent.objectName, ctx.getObjectWhere(calEvent.table, calEvent.key, calEvent.id), null, target, false, $(this));
- }
- }
- },
- eventRender: function (event, element, view) {
- let el = $(element);
- switch (view.name) {
- case 'month':
- element.find('span.fc-title').html(element.find('span.fc-title').text());
- el.addClass("test");
- if (el.find('flx-tooltip').length === 0) {
- var text = element.find('span.fc-title').clone();
- text.find('.hidden').remove();
- el.tooltip({
- title: text.text(),
- delay: { show: 1000 },
- placement: "top",
- trigger: 'hover'
- });
- }
- break;
- case 'agendaWeek':
- element.find('div.fc-content').find('.fc-title').html(element.find('div.fc-content').find('.fc-title').text());
- el.addClass("test");
- if (el.find('flx-tooltip').length === 0) {
- var text = element.find('div.fc-title').clone();
- text.find('.hidden').remove();
- el.tooltip({
- title: text.text(),
- delay: { show: 1000 },
- placement: "top",
- trigger: 'hover'
- });
- }
- break;
- case 'agendaDay':
- element.find('div.fc-content').find('.fc-title').html(element.find('div.fc-content').find('.fc-title').text());
- el.addClass("test");
- el.addClass("fc-day-size");
- if (el.find('flx-tooltip').length === 0) {
- var text = element.find('div.fc-title').clone();
- text.find('.hidden').remove();
- el.tooltip({
- title: text.text(),
- delay: { show: 1000 },
- placement: "top",
- trigger: 'hover'
- });
- }
- break;
- case 'listWeek':
- element.find('td.fc-list-item-title').html(element.find('td.fc-list-item-title').text());
- el.addClass("test");
- if (el.find('flx-tooltip').length === 0) {
- var text = element.find('td.fc-list-item-title').clone();
- text.find('.hidden').remove();
- el.tooltip({
- title: text.text(),
- delay: { show: 1000 },
- placement: "top",
- trigger: 'hover'
- });
- }
- break;
- }
- },
- dayClick: function (date, jsEvent, view) {
- if (!ctx.dayClick) {
- ctx.dayClick = true;
- let hasTime = date.hasTime();
- if (ctx.objects.length > 1) {
- let myButtons = new Object();
- let buttons = '';
- for (var i = 0; i < ctx.objects.length; i++) {
- myButtons[ctx.objects[i].ObjectName] = {
- 'class': 'btn btn-default',
- text: ctx.objects[i].ObjectName,
- SchedulerName: ctx.objects[i].SchedulerName,
- ObjectName: ctx.objects[i].ObjectName,
- StartDateField: ctx.objects[i].StartDateField,
- EndDateField: ctx.objects[i].EndDateField,
- StartTimeField: ctx.objects[i].StartTimeField,
- EndTimeField: ctx.objects[i].EndTimeField,
- DurationField: ctx.objects[i].DurationField,
- closeOnClick: true,
- Icon: ctx.objects[i].Icon
- };
- if (ctx.objects[i].CanInsert) {
- buttons += '<a style="padding: 0.7em;margin-right: 3%;margin-bottom: 3%;" class="btn btn-default bg-outstanding modalButton"><i style="margin-right:4px;" class="' + ctx.objects[i].Icon + '"></i>' + ctx.objects[i].ObjectName + '</a>';
- }
- }
- if (buttons != '') {
- $.sweetModal({
- title: flexygo.localization.translate('flxscheduler.chooseobjects'),
- content: '<div>' + buttons + '</div>',
- theme: $.sweetModal.THEME_MIXED,
- width: '31%'
- });
- $(".modalButton").click(function () {
- let object = myButtons[this.text];
- ctx.openEvent(object.ObjectName, object.StartDateField, object.EndDateField, object.StartTimeField, object.EndTimeField, object.DurationField, date.format("YYYY-MM-DD"), date.format("HH:mm"), object.AllDayField, hasTime);
- $('.sweet-modal-overlay').remove();
- });
- }
- }
- else {
- if (ctx.objects[0].CanInsert) {
- ctx.openEvent(ctx.objects[0].ObjectName, ctx.objects[0].StartDateField, ctx.objects[0].EndDateField, ctx.objects[0].StartTimeField, ctx.objects[0].EndTimeField, ctx.objects[0].DurationField, date.format("YYYY-MM-DD"), date.format("HH:mm"), ctx.objects[0].AllDayField, hasTime);
- }
- }
- }
- }
- });
- ctx.checkPanelObjects(ctx.additionalWhere);
- //Datepicker
- $('.fc-center').append('<div class="col-6 col-m-12"><div id="datepicker" style="display:none;position:absolute;z-index: 4;" class="cute-calendar"></div></div>');
- let dp1 = $('#datepicker');
- $('.fc-center').click(function () {
- dp1.show();
- });
- dp1.datepicker({
- onSelect: function (dateText, inst) {
- dp1.hide();
- myCalendar.fullCalendar('gotoDate', dateText);
- ctx.checkPanelObjects(ctx.additionalWhere);
- }, firstDay: 1
- });
- //Events
- $('.fc-prev-button').click(function () {
- ctx.checkPanelObjects(ctx.additionalWhere);
- });
- $('.fc-next-button').click(function () {
- ctx.checkPanelObjects(ctx.additionalWhere);
- });
- $('.fc-agendaWeek-button').click(function () {
- ctx.checkPanelObjects(ctx.additionalWhere);
- });
- $('.fc-month-button').click(function () {
- ctx.checkPanelObjects(ctx.additionalWhere);
- });
- $('.fc-listWeek-button').click(function () {
- ctx.checkPanelObjects(ctx.additionalWhere);
- });
- $('.fc-agendaDay-button').click(function () {
- ctx.checkPanelObjects(ctx.additionalWhere);
- });
- $('.fc-today-button').click(function () {
- ctx.checkPanelObjects(ctx.additionalWhere);
- });
- $('#mainContent').on('scroll', function () {
- dp1.hide();
- });
- $(document).mouseup(function (e) {
- if (!dp1.is(e.target) && dp1.has(e.target).length === 0) {
- dp1.hide();
- }
- });
- }
- /**
- * Check Objects.
- * @method checkPanelObjects
- */
- checkPanelObjects(additionalWhere) {
- let ctx = this;
- let me = $(this);
- //Panel de objetos
- /*Empieza a cargar*/
- me.find('#loading').html(flexygo.utils.loadingMsg());
- ctx.eventsRefresh = false;
- //me.find('.fc-view-container').css('display','none');
- for (var x in ctx.checkObjects) {
- for (var i = 0; i < ctx.objects.length; i++) {
- if (ctx.checkObjects[x] == ctx.objects[i].ObjectName) {
- ctx.changeEvents(ctx.objects[i].ObjectName, ctx.objects[i].ViewName, ctx.objects[i].ColorField, ctx.objects[i].StartDateField, ctx.objects[i].EndDateField, ctx.objects[i].StartTimeField, ctx.objects[i].EndTimeField, ctx.objects[i].DurationField, ctx.objects[i].DescripTemplate, ctx.objects[i].key, ctx.objects[i].table, ctx.objects[i].UserIdField, ctx.objects[i].Filter, ctx.objects[i].TextColorField, additionalWhere, ctx.objects[i].TokenDefault, ctx.objects[i].CanEdit, ctx.objects[i].CanView, ctx.objects[i].AllDayField);
- }
- }
- }
- }
- /**
- * Open Event.
- * @method openEvent
- */
- openEvent(objectName, startDate, endDate, startTime, endTime, duration, date, time, allday, hasTime) {
- let ctx = this;
- let displayTimeEnd = new Date();
- let hour = time.slice(0, 2);
- let minutes = time.slice(3, 5);
- let localDate = date + " " + time;
- displayTimeEnd.setHours(parseInt(hour));
- displayTimeEnd.setMinutes(parseInt(minutes));
- displayTimeEnd.setMinutes(displayTimeEnd.getMinutes() + 15);
- let timeEnd = displayTimeEnd.toTimeString();
- let defaults = {};
- defaults[startDate] = localDate;
- if (startTime) {
- defaults[startTime] = time;
- }
- if (endDate) {
- defaults[endDate] = localDate;
- }
- if (endTime) {
- defaults[endTime] = timeEnd.slice(0, 5);
- }
- if (duration) {
- defaults[duration] = '15';
- }
- if (allday) {
- if (hasTime) {
- defaults[allday] = false;
- }
- else {
- defaults[allday] = true;
- }
- }
- flexygo.nav.openPage('edit', objectName, null, JSON.stringify(defaults), 'modal1024x768', false, $(this));
- ctx.dayClick = false;
- }
- /**
- * Change Events.
- * @method changeEvents
- */
- changeEvents(objectName, viewName, color, startDate, endDate, startTime, endTime, duration, descripTemplate, key, table, userIdField, filter, textColor, additionalWhere, tokenDefault, canEdit, canView, allDayField) {
- let ctx = this;
- let me = $(this);
- let myCalendar = me.find('#calendar');
- myCalendar.fullCalendar('removeEvents');
- let moment = myCalendar.fullCalendar('getDate');
- let date = new Date(moment);
- let dateStartWeek = ctx.getStartWeek(new Date(moment));
- let dateWeek = new Date(dateStartWeek.getTime() + (7 * 24 * 60 * 60 * 1000));
- let dateDay = new Date(date.getTime() + (1 * 24 * 60 * 60 * 1000));
- let view = myCalendar.fullCalendar('getView');
- let start = '';
- let end = '';
- let dp1 = $('#datepicker');
- dp1.datepicker("setDate", (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear());
- switch (view.name) {
- case 'month':
- start = ctx.formatDate(date, '' + (date.getMonth() + 1), '01', date.getFullYear());
- if (date.getMonth() + 1 == 12) {
- end = ctx.formatDate(date, '01', '01', date.getFullYear() + 1);
- }
- else {
- end = ctx.formatDate(date, '' + (date.getMonth() + 2), '01', date.getFullYear());
- }
- break;
- case 'agendaWeek':
- case 'listWeek':
- start = ctx.formatDate(dateStartWeek, '' + (dateStartWeek.getMonth() + 1), '' + (dateStartWeek.getDate()), dateStartWeek.getFullYear());
- end = ctx.formatDate(dateWeek, '' + (dateWeek.getMonth() + 1), '' + (dateWeek.getDate()), dateWeek.getFullYear());
- break;
- case 'agendaDay':
- start = ctx.formatDate(date, '' + (date.getMonth() + 1), '' + (date.getDate()), date.getFullYear());
- end = ctx.formatDate(dateDay, '' + (dateDay.getMonth() + 1), '' + (dateDay.getDate()), dateDay.getFullYear());
- break;
- }
- ctx.schedulerResult(objectName, viewName, start, end, color, startDate, endDate, startTime, endTime, duration, descripTemplate, key, table, userIdField, filter, textColor, additionalWhere, tokenDefault, canEdit, canView, allDayField);
- }
- /**
- * Results.
- * @method schedulerResult
- */
- schedulerResult(objectName, viewName, start, end, color, startDate, endDate, startTime, endTime, duration, descripTemplate, key, table, userIdField, filter, textColor, additionalWhere, tokenDefault, canEdit, canView, allDayField) {
- let ctx = this;
- let me = $(this);
- let myCalendar = me.find('#calendar');
- me.find('#loading').css('display', '');
- let params = {
- "ObjectName": objectName,
- "ViewName": viewName,
- "Start": start,
- "End": end,
- "StartDate": startDate,
- "EndDate": endDate,
- "StartTime": startTime,
- "EndTime": endTime,
- "Duration": duration,
- "DescripTemplate": descripTemplate,
- "Keys": key,
- "Color": color,
- "UserIdField": userIdField,
- "Filter": filter,
- "TextColor": textColor,
- "AdditionalWhere": additionalWhere,
- "TokenDefault": tokenDefault,
- "AllDayField": allDayField
- };
- flexygo.ajax.post('~/api/Scheduler', 'GetSchedulerResult', params, (response) => {
- ctx.n = ctx.n + 1;
- if (response) {
- for (var i in response) {
- let st = response[i].StartTime;
- let et = response[i].EndTime;
- if (st.length == 5) {
- st = st + ':00';
- }
- if (et.length == 5) {
- et = et + ':00';
- }
- let descrip = flexygo.utils.parser.recursiveCompile(response[i].Row, response[i].Descrip);
- let newEvent = {
- id: response[i].Id,
- color: response[i].Color,
- textColor: response[i].TextColor,
- title: descrip,
- start: response[i].StartDate.slice(0, 10) + ' ' + st,
- end: response[i].EndDate.slice(0, 10) + ' ' + et,
- objectName: objectName,
- startDate: startDate,
- endDate: endDate,
- startTime: startTime,
- endTime: endTime,
- duration: duration,
- key: key,
- table: table,
- canEdit: canEdit,
- canView: canView,
- allDay: false
- };
- if (response[i].AllDayField && ctx.allDay) {
- newEvent.allDay = response[i].AllDayField;
- var date = moment(response[i].EndDate.slice(0, 10) + ' ' + et).add('days', 1).format("YYYY-MM-DD HH:MM:SS");
- newEvent.end = date;
- }
- ctx.events.push(newEvent);
- }
- }
- if (ctx.n == ctx.checkObjects.length) {
- myCalendar.fullCalendar('addEventSource', ctx.events);
- me.find('.fc-view-container').css('display', '');
- me.find('#loading').css('display', 'none');
- ctx.n = 0;
- ctx.events = [];
- }
- ctx.eventsRefresh = true;
- if (ctx.hasPendingRefresh) {
- ctx.hasPendingRefresh = false;
- ctx.refresh();
- }
- });
- }
- formatDate(date, month, day, year) {
- if (month.length < 2)
- month = '0' + month;
- if (day.length < 2)
- day = '0' + day;
- return [year, month, day].join('');
- }
- getStartWeek(d) {
- let day = d.getDay(), diff = d.getDate() - day + (day == 0 ? -6 : 1); // adjust when day is sunday
- return new Date(d.setDate(diff));
- }
- getObjectWhere(table, key, id) {
- let where = "";
- let last = 0;
- for (var i = 0; i < key.length; i++) {
- where += table + "." + key[i] + " = \'" + id[i] + "\'";
- if (++last < key.length) {
- where += " and ";
- }
- }
- return where;
- }
- /**
- * Fires when element is detached to DOM
- * @method disconnectedCallback
- */
- disconnectedCallback() {
- //Remove event handler
- flexygo.events.off(this, "dialog", "closed");
- }
- }
- wc.FlxScheduler = FlxScheduler;
- class FlxSchedulerElement extends HTMLElement {
- /**
- * Fires when element is attached to DOM
- * @method attachedCallback
- */
- attachedCallback() {
- let element = $(this);
- let ctl = new FlxScheduler();
- ctl.webControl = element;
- ctl.objectName = element.attr("ObjectName");
- ctl.objectWhere = element.attr("ObjectWhere");
- ctl.moduleName = element.attr("ModuleName");
- ctl.pageName = element.attr("PageName");
- element.data("controller", ctl);
- ctl.init();
- }
- /**
- * Fires when the attribute value of the element is changed.
- * @method attributeChangedCallback
- */
- attributeChangedCallback(attrName, oldVal, newVal) {
- let element = $(this);
- let ctl = element.data('controller');
- let needInit = false;
- if (ctl && attrName.toLowerCase() == 'modulename' && newVal && newVal != '') {
- ctl.moduleName = newVal;
- needInit = true;
- }
- else if (ctl && attrName.toLowerCase() == 'objectname' && newVal && newVal != '') {
- ctl.objectName = newVal;
- needInit = true;
- }
- else if (ctl && attrName.toLowerCase() == 'objectwhere' && newVal && newVal != '') {
- ctl.objectWhere = newVal;
- needInit = true;
- }
- else if (ctl && attrName.toLowerCase() == 'pagename' && newVal && newVal != '') {
- ctl.pageName = newVal;
- needInit = true;
- }
- if (needInit) {
- ctl.init();
- }
- }
- }
- wc.FlxSchedulerElement = FlxSchedulerElement;
- })(wc = ui.wc || (ui.wc = {}));
- })(ui = flexygo.ui || (flexygo.ui = {}));
- })(flexygo || (flexygo = {}));
- window.customElements.define("flx-scheduler", flexygo.ui.wc.FlxScheduler);
- //# sourceMappingURL=flx-scheduler.js.map
-