Дерево страниц
Skip to end of metadata
Go to start of metadata

Постановка задачи

Добавить проверки при сохранении заявки на рабочее место:

  • Дата переезда должна быть больше даты создания заявки на организацию рабочего места
  • Дата переезда должна быть рабочим днем недели.
  • У данного работника уже есть рабочее место, требуется выбрать заявку с типом на перемещение.
Инструмент: Палитра XML
Статус

ГОТОВО

РазделФорма
Комментарий

Реализация

Результат

Доработка обработчика событий

В схему Заявки на РМ в функцию 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 ("Дата переезда должна быть рабочим днем недели.");
			}

		}
	}
}