Доработка обработчика событий
В схему Заявки на РМ в функцию querySave добавить проверки, которые описаны в требованиях
У данного работника уже есть рабочее место, требуется выбрать заявку с типом на перемещение.
querySave
importPackage(Packages.java.lang); importPackage(Packages.java.util); importClass(Packages.java.lang.String); importClass(Packages.java.util.ArrayList); importPackage(Packages.ru.intertrust.cmj.af.so); importPackage(Packages.ru.intertrust.cmj.rest.tuning); importClass(Packages.ru.intertrust.cmj.rest.tuning.TuningHelper); importClass(Packages.ru.intertrust.cmj.af.so.SOBeard); importClass(Packages.ru.intertrust.cmj.af.core.AFSession); importClass(Packages.ru.intertrust.cmj.af.core.AFCMDomino); importClass(Packages.org.apache.commons.lang3.StringUtils); importClass(Packages.ru.intertrust.cmj.tunable.object.TunableObjectApplication); importClass(Packages.ru.intertrust.cmj.af.utils.DominoUtils); importClass(Packages.ru.intertrust.cmj.af.utils.BeansUtils); importClass(Packages.ru.intertrust.cmj.admin.AdminApplicationImpl); //Функция вызывается при сохранении объекта function querySave(object, document) { // Получение tn-объекта var tuning = object.tuning(); // Карта AFInstance текушего объекта var values = tuning.getValues(); // Работник, выбранный в заявке var empl = values.get('wpEmployee').getValue(); // Персона работника var person = empl.originalData().getParty().getPerson(); if (person != null) { var arrUnid = person.getUNID().split(":"); var tnUnid = arrUnid[0] + "-TN:" + arrUnid[1]; if (!StringUtils.isEmpty(tnUnid)) { //Получение tn-объекта персоны var tunApp = AFSession.get().getApplication(TunableObjectApplication.class); var personTNObj = tunApp.getEntityByUNID(tnUnid); //Если в персоне есть заполненое поле "Код РМ", тогда выводить сообщение //Сообщение выводится, через вызов ошибки throw if (personTNObj != null && personTNObj.tuning().getValues().get("RMCode") != null && !StringUtils.isEmpty(personTNObj.tuning().getValues().get("RMCode").getValue())) { throw ("У данного работника уже есть рабочее место, требуется выбрать заявку с типом на перемещение."); } } } }
Дата переезда должна быть рабочим днем недели
querySave
importPackage(Packages.java.lang); importPackage(Packages.java.util); importPackage(Packages.ru.intertrust.cmj.af.so); importPackage(Packages.ru.intertrust.cmj.rest.tuning); importClass(Packages.ru.intertrust.cmj.rest.tuning.TuningHelper); importClass(Packages.ru.intertrust.cmj.af.so.SOBeard); importClass(Packages.ru.intertrust.cmj.af.core.AFSession); importClass(Packages.ru.intertrust.cmj.af.core.AFCMDomino); importClass(Packages.org.apache.commons.lang3.StringUtils); importClass(Packages.java.lang.String); importClass(Packages.ru.intertrust.cmj.tunable.object.TunableObjectApplication); importClass(Packages.ru.intertrust.cmj.af.utils.DominoUtils); importClass(Packages.ru.intertrust.cmj.af.utils.BeansUtils); importClass(Packages.ru.intertrust.cmj.admin.AdminApplicationImpl); importClass(Packages.java.util.Date); function querySave(object, document) { // Получение tn-объекта var tuning = object.tuning(); // Карта AFInstance текушего объекта var values = tuning.getValues(); if (values.get('wpMovingDate') != null && values.get('wpMovingDate').getValue() != null) { // Дата переезда var movingDate = values.get('wpMovingDate').getValue(); if (values.get('createdate') != null && values.get('createdate').getValue() != null) { // Дата создания var createdate = values.get('createdate').getValue(); if (movingDate.compareTo(createdate) < 1) { throw ("Дата переезда должна быть больше даты создания заявки на организацию рабочего места."); } } } }
Дата переезда должна быть рабочим днем недели
querySave
importPackage(Packages.java.lang); importPackage(Packages.java.util); importPackage(Packages.ru.intertrust.cmj.af.so); importPackage(Packages.ru.intertrust.cmj.rest.tuning); importClass(Packages.ru.intertrust.cmj.rest.tuning.TuningHelper); importClass(Packages.ru.intertrust.cmj.af.so.SOBeard); importClass(Packages.ru.intertrust.cmj.af.core.AFSession); importClass(Packages.ru.intertrust.cmj.af.core.AFCMDomino); importClass(Packages.org.apache.commons.lang3.StringUtils); importClass(Packages.java.lang.String); importClass(Packages.ru.intertrust.cmj.tunable.object.TunableObjectApplication); importClass(Packages.ru.intertrust.cmj.af.utils.DominoUtils); importClass(Packages.ru.intertrust.cmj.af.so.impl.AppointmentHead); importClass(Packages.ru.intertrust.cmj.af.utils.BeansUtils); importClass(Packages.ru.intertrust.cmj.admin.AdminApplicationImpl); importClass(Packages.ru.intertrust.cmj.admin.so.worktimeprofile.SOWorkTimeProfile); importClass(Packages.java.util.Calendar); importClass(Packages.java.util.Date); importClass(Packages.java.util.ArrayList); importClass(Packages.java.lang.Integer); function querySave(object, document) { // Получение tn-объекта var tuning = object.tuning(); // Карта AFInstance текушего объекта var values = tuning.getValues(); // Работник, выбранный в заявке var empl = values.get('wpEmployee').getValue(); if (values.get('wpMovingDate') != null && values.get('wpMovingDate').getValue() != null) { // Дата переезда var movingDate = values.get('wpMovingDate').getValue(); // Получение рабочего профиля var appAdmin = AFSession.get().getApplication(AdminApplicationImpl.class); var workTimeProfile = appAdmin.getWorkTimeProfileDefault(); if (workTimeProfile == null) { throw ("Расчет даты переезда невозможен, так как не найден профиль рабочего времени по умолчанию. Обратитесь к администратору, для его создания"); } else { //Вычисляются выходные дни на неделе var dayDescription = workTimeProfile.getDayDescriptions(); var holidayIndexes = new ArrayList(); var holidayValue = SOWorkTimeProfile.DayType.HOLIDAY; //выходной for (var i = 0; i < dayDescription.size(); i++) { if (dayDescription.get(i).getType() == holidayValue) holidayIndexes.add(Integer.valueOf(i + 1)); } //Вычисляется день недели в зависимости от выбранной даты var rCalendar = movingDate.toJavaCalendar(); var intDay = rCalendar.get(Calendar.DAY_OF_WEEK); if (intDay == 1) { intDay = 7; } else { --intDay; } //Сравнивается день недели с днями рабочего профиля for (var i = 0; i < holidayIndexes.size(); i++) { if (holidayIndexes.get(i) == intDay) throw ("Дата переезда должна быть рабочим днем недели."); } } } }