UNPKG

processmaker-builder

Version:

The gulp task runner for ProcessMaker building

992 lines (959 loc) 42 kB
(function () { var loadValuesStartTimer, openForm, updateStatus; PMDesigner.startTimer = function (element) { var startTimer = element, restClient, loadServerData, listUsers, itemsDaly, itemsWeekly, loadOptionsRadio, itemsMonthly, itemsOneTime, itemsEvery, showProperties, updateCaseScheduler, buttonCancel, loadUsers, loadDataForm, formCreateCaseScheduler, schedulerListWindow, buttonSave, dataForm; loadValuesStartTimer = function ($flag) { listUsers = []; dataForm = []; restClient = new PMRestClient({ typeRequest: 'post', multipart: true, data: { calls: [ { url: 'activity/' + startTimer.ports.get(0).connection.flo_element_dest + '/assignee/all', method: 'GET' }, { url: 'case-scheduler/' + startTimer.evn_uid, method: 'GET' } ] }, functionSuccess: function (xhr, response) { listUsers = response[0].response; dataForm = response[1].response; }, functionFailure: function (xhr, response) { PMDesigner.msgWinError(response.error.message); }, messageError: [null, 'There are problems loading the Start Timer, please try again.'.translate()] }); restClient.executeRestClient(); if ($flag) { return listUsers.length; } return true; }; updateCaseScheduler = function (data) { var restProxy = new PMRestClient({ endpoint: 'case-scheduler/' + startTimer.evn_uid, typeRequest: 'update', data: data, functionSuccess: function (xhr, response) { formCreateCaseScheduler.reset(); schedulerListWindow.close(); }, functionFailure: function (xhr, response) { PMDesigner.msgWinError(response.error.message); }, messageSuccess: 'Start Timer updated successfully'.translate(), messageError: 'There are problems updating the Start Timer, please try again.'.translate(), flashContainer: document.body }); restProxy.executeRestClient(); }; updateStatus = function () { var status = (typeof dataForm.sch_state !== 'undefined') ? ((dataForm.sch_state === 'ACTIVE') ? 'INACTIVE' : 'ACTIVE') : 'INACTIVE'; dataForm.sch_state = status; updateCaseScheduler(dataForm); }; //Items for the form Create and edit Case Scheduler itemsDaly = [ { pmType: 'panel', layout: 'hbox', items: [ { id: 'startDate', pmType: 'datetime', label: 'Start date'.translate(), value: '', returnFormat: 'yy-mm-dd', required: true, dateFormat: 'yy mm dd', dateTime: false, name: 'startDate', valueType: 'date', labelWidth: '26%' }, { id: 'endDate', pmType: 'datetime', label: 'End date'.translate(), value: '', returnFormat: 'yy-mm-dd', required: false, dateFormat: 'yy mm dd', dateTime: false, name: 'endDate', valueType: 'date' } ] }, { id: 'execttime', pmType: 'text', label: 'Execution time'.translate(), value: '', required: true, name: 'execttime', placeholder: '(HH:MM) Format 24 hrs.'.translate(), valueType: 'string', validators: [{ pmType: 'regexp', criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, errorMessage: 'Please enter a valid hour.'.translate() } ], helper: 'Example: 1:00, 14:30, 00:00' } ]; itemsWeekly = [ { pmType: 'panel', layout: 'hbox', items: [ { id: 'startDate', pmType: 'datetime', label: 'Start date'.translate(), value: '', returnFormat: 'yy-mm-dd', required: true, dateFormat: 'yy mm dd', dateTime: false, name: 'startDate', valueType: 'date', labelWidth: '26%' }, { id: 'endDate', pmType: 'datetime', label: 'End date'.translate(), value: '', returnFormat: 'yy-mm-dd', required: false, dateFormat: 'yy mm dd', dateTime: false, name: 'endDate', valueType: 'date' } ] }, { id: 'execttime', pmType: 'text', label: 'Execution time'.translate(), value: '', required: true, name: 'execttime', placeholder: '(HH:MM) Format 24 hrs.'.translate(), valueType: 'string', validators: [{ pmType: 'regexp', criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, errorMessage: 'Please enter a valid hour.'.translate() } ], helper: 'Example: 1:00, 14:30, 00:00' }, { id: 'daysoftheweek', pmType: 'checkbox', label: 'Select the day(s) of the week below'.translate(), value: '', name: 'daysoftheweek', required: false, controlPositioning: 'horizontal', maxDirectionOptions: 3, options: [ { id: 'monday', label: 'Monday'.translate(), value: '1' }, { id: 'tuesday', label: 'Tuesday'.translate(), value: '2' }, { id: 'wednesday', label: 'Wednesday'.translate(), value: '3' }, { id: 'thursday', label: 'Thursday'.translate(), value: '4' }, { id: 'friday', label: 'Friday'.translate(), value: '5' }, { id: 'saturday', label: 'Saturday'.translate(), value: '6' }, { id: 'sunday', label: 'Sunday'.translate(), value: '7' } ] } ]; loadOptionsRadio = function (newVal) { var paneldaysofMonth = formCreateCaseScheduler.getItems()[1].getItems()[2].getItems()[1]; paneldaysofMonth.setVisible(true); if (newVal === 'dayofmonth') { paneldaysofMonth.getItems()[0].setVisible(true); paneldaysofMonth.getItems()[1].setVisible(false); } else if (newVal === 'day') { paneldaysofMonth.getItems()[0].setVisible(false); paneldaysofMonth.getItems()[1].setVisible(true); } }; itemsMonthly = [ { pmType: 'panel', layout: 'hbox', items: [ { id: 'startDate', pmType: 'datetime', label: 'Start date'.translate(), value: '', returnFormat: 'yy-mm-dd', required: true, dateFormat: 'yy mm dd', datetime: false, name: 'startDate', valueType: 'date', labelWidth: '26%' }, { id: 'endDate', pmType: 'datetime', label: 'End date'.translate(), value: '', returnFormat: 'yy-mm-dd', required: false, dateFormat: 'yy mm dd', datetime: false, name: 'endDate', valueType: 'date' } ] }, { id: 'execttime', pmType: 'text', label: 'Execution time'.translate(), value: '', required: true, name: 'execttime', placeholder: '(HH:MM) Format 24 hrs.'.translate(), valueType: 'string', controlsWidth: 580, validators: [{ pmType: 'regexp', criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, errorMessage: 'Please enter a valid hour.'.translate() } ], helper: 'Example: 1:00, 14:30, 00:00' }, { pmType: 'panel', id: 'panelDays', layout: 'hbox', items: [ { id: 'options', pmType: 'radio', label: '', value: '', name: 'options', required: false, controlPositioning: 'vertical', maxDirectionOptions: 4, options: [ { id: 'dayMonth', label: 'Day of month'.translate(), value: 'dayofmonth' }, { id: 'day', label: 'The day'.translate(), value: 'day' } ], onChange: function (newVal, oldVal) { loadOptionsRadio(newVal); }, labelWidth: '46%' }, { pmType: 'panel', id: 'paneldaysofMonth', layout: 'vbox', items: [ { id: 'dayoftheMonth', pmType: 'text', label: '', value: '', placeholder: 'Day of the month (example: 1)'.translate(), required: false, name: 'dayMonth', valueType: 'string' }, { pmType: 'panel', id: 'panelmonth', layout: 'hbox', items: [ { id: 'first', pmType: 'dropdown', label: '', value: '', required: false, name: 'first', valueType: 'string', options: [ { label: 'First'.translate(), value: '1' }, { label: 'Second'.translate(), value: '2' }, { label: 'Third'.translate(), value: '3' }, { label: 'Fourth'.translate(), value: '4' }, { label: 'Last'.translate(), value: '5' } ], controlsWidth: 100 }, { id: 'day', pmType: 'dropdown', label: '', value: '', required: false, name: 'day', valueType: 'string', options: [ { label: 'Monday'.translate(), value: '1' }, { label: 'Tuesday'.translate(), value: '2' }, { label: 'Wednesday'.translate(), value: '3' }, { label: 'Thursday'.translate(), value: '4' }, { label: 'Friday'.translate(), value: '5' }, { label: 'Saturday'.translate(), value: '6' }, { label: 'Sunday'.translate(), value: '7' } ], controlsWidth: 100 } ] } ] } ] }, { id: 'months', pmType: 'checkbox', label: 'Of the month(s)'.translate(), value: '', name: 'months', required: false, controlPositioning: 'horizontal', maxDirectionOptions: 4, options: [ { id: 'jan', label: 'Jan'.translate(), value: '1' }, { id: 'feb', label: 'Feb'.translate(), value: '2' }, { id: 'mar', label: 'Mar'.translate(), value: '3' }, { id: 'apr', label: 'Apr'.translate(), value: '4' }, { id: 'may', label: 'May'.translate(), value: '5' }, { id: 'jun', label: 'Jun'.translate(), value: '6' }, { id: 'jul', label: 'Jul'.translate(), value: '7' }, { id: 'aug', label: 'Aug'.translate(), value: '8' }, { id: 'sep', label: 'Sep'.translate(), value: '9' }, { id: 'oct', label: 'Oct'.translate(), value: '10' }, { id: 'nov', label: 'Nov'.translate(), value: '11' }, { id: 'dec', label: 'Dec'.translate(), value: '12' } ] } ]; itemsOneTime = [{ id: 'execttime', pmType: 'text', label: 'Execution time'.translate(), value: '', required: true, name: 'execttime', placeholder: '(HH:MM) Format 24 hrs.'.translate(), valueType: 'string', validators: [{ pmType: 'regexp', criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, errorMessage: 'Please enter a valid hour.'.translate() } ], helper: 'Example: 1:00, 14:30, 00:00' }]; itemsEvery = [{ id: 'execttime', pmType: 'text', label: 'Execute every Hour(s)'.translate(), value: '', required: true, name: 'execttime', valueType: 'string', placeholder: '(HH:MM) Format 24 hrs.'.translate(), validators: [{ pmType: 'regexp', criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, errorMessage: 'Please enter a valid hour.'.translate() } ], helper: 'Example: 1:00, 14:30, 00:00' }]; showProperties = function (newValue) { switch (newValue) { case 'daily': formCreateCaseScheduler.getItems()[1].clearItems(); formCreateCaseScheduler.getItems()[1].setVisible(true); formCreateCaseScheduler.getItems()[1].setItems(itemsDaly); break; case 'weekly': formCreateCaseScheduler.getItems()[1].clearItems(); formCreateCaseScheduler.getItems()[1].setVisible(true); formCreateCaseScheduler.getItems()[1].setItems(itemsWeekly); break; case 'monthly': formCreateCaseScheduler.getItems()[1].clearItems(); formCreateCaseScheduler.getItems()[1].setVisible(true); formCreateCaseScheduler.getItems()[1].setItems(itemsMonthly); var paneldaysofMonth = formCreateCaseScheduler.getItems()[1].getItems()[2].getItems()[1]; paneldaysofMonth.setVisible(false); formCreateCaseScheduler.getItems()[1].getItems()[2].getItems()[0].hideColon(); paneldaysofMonth.getItems()[0].hideColon(); paneldaysofMonth.getItems()[1].getItems()[0].hideColon(); paneldaysofMonth.getItems()[1].getItems()[1].hideColon(); break; case 'oneTime': formCreateCaseScheduler.getItems()[1].clearItems(); formCreateCaseScheduler.getItems()[1].setVisible(true); formCreateCaseScheduler.getItems()[1].setItems(itemsOneTime); break; case 'every': formCreateCaseScheduler.getItems()[1].clearItems(); formCreateCaseScheduler.getItems()[1].setVisible(true); formCreateCaseScheduler.getItems()[1].setItems(itemsEvery); validateKeysField(formCreateCaseScheduler.getField('execttime').getControls()[0].getHTML(), ['isnumber', 'iscolon']); break; } }; //Form to Edit and create the Case Scheduler formCreateCaseScheduler = new PMUI.form.Form({ id: 'formCreateCaseScheduler', border: false, visibleHeader: false, width: '925px', name: 'formcreate', title: '', items: [ { id: 'panelProperties', pmType: 'panel', layout: 'vbox', fieldset: true, height: '350px', legend: 'Properties'.translate(), items: [ { id: 'state', pmType: 'dropdown', label: 'Status'.translate(), name: 'state', required: true, value: '', controlsWidth: 150, options: [ { value: 'ACTIVE', label: 'Active'.translate() }, { value: 'INACTIVE', label: 'Inactive'.translate() } ] }, { id: 'username', pmType: 'dropdown', label: 'User'.translate(), name: 'username', required: true, controlsWidth: 300, value: '', options: [], onChange: function (newValue, prevValue) { } }, { id: 'name', pmType: 'text', label: 'Name'.translate(), value: startTimer.evn_name, required: true, name: 'name', visible: false, valueType: 'string' }, { id: 'performTask', pmType: 'dropdown', label: 'Perform this task'.translate(), name: 'performTask', required: true, value: '', controlsWidth: 300, options: [ { label: '- Select -'.translate(), value: '', disabled: true, selected: true }, { value: 'daily', label: 'Daily'.translate() }, { value: 'weekly', label: 'Weekly'.translate() }, { value: 'monthly', label: 'Monthly'.translate() }, { value: 'oneTime', label: 'One Time Only'.translate() }, { value: 'every', label: 'Every'.translate() } ], onChange: function (newValue, prevValue) { showProperties(newValue); } } ] }, { id: 'panelSelectDate', pmType: 'panel', layout: 'vbox', fieldset: true, visible: false, height: '350px', legend: 'Select the date and time for case(s) to be initiated.'.translate(), items: [] } ] }); buttonCancel = new PMUI.ui.Button({ id: 'cancelSchedulerButton', text: 'Cancel'.translate(), buttonType: 'error', handler: function (event) { if (formCreateCaseScheduler.isDirty()) { var message_window = new PMUI.ui.MessageWindow({ windowMessageType: 'warning', width: 490, bodyHeight: 'auto', id: 'cancelMessageStartTimer', title: 'Start Timer Event'.translate(), message: 'Are you sure you want to discard your changes?'.translate(), footerItems: [ { text: 'No'.translate(), handler: function () { message_window.close(); }, buttonType: "error" }, { text: 'Yes'.translate(), handler: function () { message_window.close(); schedulerListWindow.close(); }, buttonType: "success" } ] }); message_window.open(); message_window.showFooter(); } else { formCreateCaseScheduler.reset(); schedulerListWindow.close(); } } }); //Window Buttons buttonSave = new PMUI.ui.Button({ id: 'saveSchedulerButton', text: 'Save'.translate(), height: 31, buttonType: 'success', handler: function (event) { if (formCreateCaseScheduler.isValid()) { var dataFormCreate = formCreateCaseScheduler.getData(); var dataToSend = { sch_del_user_name: dataFormCreate.username, sch_name: startTimer.evn_name, tas_uid: startTimer.ports.get(0).connection.flo_element_dest, sch_start_time: '', sch_start_date: '', sch_week_days: '', sch_start_day: '', sch_start_day_opt_1: '', sch_start_day_opt_2: '', sch_months: '', sch_end_date: '', sch_repeat_every: '', sch_state: (dataFormCreate.state !== '') ? dataFormCreate.state : 'ACTIVE', sch_option: '' }; var perform = dataFormCreate.performTask; switch (perform) { case 'daily': dataToSend.sch_option = '1'; dataToSend.sch_start_time = dataFormCreate.execttime; dataToSend.sch_start_date = dataFormCreate.startDate; dataToSend.sch_end_date = dataFormCreate.endDate; break; case 'weekly': var formdays = eval(dataFormCreate.daysoftheweek); var days = ''; for (i = 0; i < formdays.length; i += 1) { if (i !== (formdays.length - 1)) { days += formdays[i] + '|'; } else { days += formdays[i]; } } dataToSend.sch_option = '2'; dataToSend.sch_start_time = dataFormCreate.execttime; dataToSend.sch_start_date = dataFormCreate.startDate; dataToSend.sch_end_date = dataFormCreate.endDate; dataToSend.sch_week_days = days; break; case 'monthly': dataToSend.sch_option = '3'; dataToSend.sch_start_time = dataFormCreate.execttime; dataToSend.sch_start_date = dataFormCreate.startDate; dataToSend.sch_end_date = dataFormCreate.endDate; if (dataFormCreate.options === 'dayofmonth') { var formmonths = eval(dataFormCreate.months); var months = ''; for (i = 0; i < formmonths.length; i += 1) { if (i !== (formmonths.length - 1)) { months += formmonths[i] + '|'; } else { months += formmonths[i]; } } dataToSend.sch_start_day = '1'; //Day of month dataToSend.sch_start_day_opt_1 = dataFormCreate.dayMonth;//1 to 31 - day of the month } else if (dataFormCreate.options === 'day') { var opt2 = dataFormCreate.first + '|' + dataFormCreate.day; var formmonths = eval(dataFormCreate.months); var months = ''; for (i = 0; i < formmonths.length; i += 1) { if (i !== (formmonths.length - 1)) { months += formmonths[i] + '|'; } else { months += formmonths[i]; } } dataToSend.sch_start_day = '2'; //Day of month dataToSend.sch_start_day_opt_2 = opt2;//1 to 31 - day of the month } dataToSend.sch_months = months; break; case 'oneTime': dataToSend.sch_option = '4'; dataToSend.sch_start_time = dataFormCreate.execttime; break; case 'every': dataToSend.sch_option = '5'; dataToSend.sch_repeat_every = timeToDecimal(dataFormCreate.execttime).toFixed(2); break; } updateCaseScheduler(dataToSend); } } }); //load users loadUsers = function () { var field = formCreateCaseScheduler.getField('username'); field.clearOptions(); for (var i = 0; i < listUsers.length; i += 1) { field.addOption({ value: listUsers[i].aas_username, label: listUsers[i].aas_name + ' ' + listUsers[i].aas_lastname }); } }; loadDataForm = function () { var loadTime, option, daysVal, monthsVal, monthsop, days, i, startTime, finallyST, dataEdit; loadTime = function (dataEdit, dataForm) { var starDate, startTime, finallyST, endDate; starDate = dataForm.sch_start_date ? dataForm.sch_start_date.split(' ') : ['']; endDate = dataForm.sch_end_date ? dataForm.sch_end_date.split(' ') : ['']; startTime = dataForm.sch_start_time.split(' '); startTime = startTime[1].split(':'); finallyST = startTime[0] + ':' + startTime[1]; dataEdit[4].setValue(starDate[0]); dataEdit[5].setValue(endDate[0]); dataEdit[6].setValue(finallyST); }; dataEdit = formCreateCaseScheduler.getFields(); dataEdit[0].setValue(dataForm.sch_state); dataEdit[1].setValue(dataForm.sch_del_user_name); option = 'daily'; switch (dataForm.sch_option) { case '1': option = 'daily'; dataEdit[3].setValue(option); showProperties(option); dataEdit = formCreateCaseScheduler.getFields(); loadTime(dataEdit, dataForm); break; case '2': option = 'weekly'; dataEdit[3].setValue(option); showProperties(option); dataEdit = formCreateCaseScheduler.getFields(); loadTime(dataEdit, dataForm); daysVal = "[\""; days = dataForm.sch_week_days.split('|'); for (i = 0; i < days.length; i += 1) { if (i !== (days.length - 1)) { daysVal += days[i] + "\",\""; } else { daysVal += days[i] + "\"]"; } } dataEdit[7].setValue(daysVal); break; case '3': option = 'monthly'; dataEdit[3].setValue(option); showProperties(option); dataEdit = formCreateCaseScheduler.getFields(); loadTime(dataEdit, dataForm); days = []; if (dataForm.sch_start_day !== '') { days = dataForm.sch_start_day.split('|'); } if (days[0] === '1') { dataEdit[7].setValue('dayofmonth'); loadOptionsRadio('dayofmonth'); dataEdit[8].setValue(days[1]); } else if (days[0] === '2') { dataEdit[7].setValue('day'); loadOptionsRadio('day'); dataEdit[9].setValue(days[1]); dataEdit[10].setValue(days[2]); } monthsVal = "[\""; monthsop = dataForm.sch_months.split('|'); for (i = 0; i < monthsop.length; i += 1) { if (i !== (monthsop.length - 1)) { monthsVal += monthsop[i] + "\",\""; } else { monthsVal += monthsop[i] + "\"]"; } } dataEdit[11].setValue(monthsVal); break; case '4': option = 'oneTime'; dataEdit[3].setValue(option); showProperties(option); dataEdit = formCreateCaseScheduler.getFields(); startTime = dataForm.sch_start_time.split(' '); startTime = startTime[1].split(':'); finallyST = startTime[0] + ':' + startTime[1]; dataEdit[4].setValue(finallyST); break; case '5': option = 'every'; dataEdit[3].setValue(option); showProperties(option); dataEdit = formCreateCaseScheduler.getFields(); dataEdit[4].setValue(decimalToTime(parseFloat(dataForm.sch_repeat_every))); break; } }; //Main window Case Scheduler schedulerListWindow = new PMUI.ui.Window({ id: 'schedulerListWindow', title: 'Start Timer Event'.translate(), height: DEFAULT_WINDOW_HEIGHT, width: DEFAULT_WINDOW_WIDTH, buttonPanelPosition: 'top', buttons: [ buttonSave, {pmType: 'label', text: 'or'}, buttonCancel ] }); openForm = function () { schedulerListWindow.addItem(formCreateCaseScheduler); schedulerListWindow.open(); loadUsers(); loadDataForm(); applyStyleWindowForm(schedulerListWindow); schedulerListWindow.showFooter(); schedulerListWindow.defineEvents(); }; }; PMDesigner.startTimer.openForm = function (element) { openForm(); }; PMDesigner.startTimer.validate = function (element) { if (element.ports.isEmpty()) { PMDesigner.msgFlash('Must connect to a Task'.translate(), document.body, 'error', 3000, 5); return false; } PMDesigner.startTimer(element); if (loadValuesStartTimer(true) === 0) { PMDesigner.msgFlash('The task doesn\'t have assigned users'.translate(), document.body, 'info', 3000, 5); return false; } return true; }; }());