При создании документа вычислить информацию относительно текущего пользователя и заполнить поля:

  • Организация - вычислить организацию 
  • Филиал/ГО -  вычислить вышестоящее подразделение с признаком "обособленное подразделение"
  • СП - вычислить вышестоящее подразделение с признаком с признаком "самостоятельное подразделение"
  • Подразделения - вычислить вышестоящую иерарахия подразделений до обособленого подразделения и сформировать массив
  • Должность - вычислить должность из карточки ШЕ
  • Телефон - вычислить внутренний номер из карточки Персоны
  • Табельный номер - вычислить табельный номер из карточки Персоны

ПодразделенияШтатная единицаПерсонаПерсона

Инструмент: Палитра XML
Статус

РазделФорма
КомментарийДополнительный комментарий


Написать JS-код 


importClass(Packages.ru.intertrust.cmj.rest.tuning.TuningHelper);
importClass(Packages.ru.intertrust.cmj.af.so.SOBeard);
importClass(Packages.ru.intertrust.cmj.af.so.SOAppointment);
importClass(Packages.ru.intertrust.cmj.af.core.AFSession);
importClass(Packages.ru.intertrust.cmj.af.core.AFCMDomino);
importPackage(Packages.java.lang);
importPackage(Packages.java.util);
importPackage(Packages.ru.intertrust.cmj.af.so);
importClass(Packages.ru.intertrust.cmj.af.utils.DominoUtils);
importClass(Packages.ru.intertrust.cmj.af.tuning.impl.AFInstanceContentImpl);
importClass(Packages.ru.intertrust.cmj.tunable.object.TunableObjectApplication);
importClass(Packages.org.springframework.util.StringUtils);
importClass(Packages.ru.intertrust.cmj.af.utils.BeansUtils);
importClass(Packages.ru.intertrust.cmj.af.utils.Utils);
importClass(Packages.ru.intertrust.cmj.dp.DPApplication);
importClass(Packages.ru.intertrust.cmj.af.so.impl.AppointmentHead);
importClass(Packages.ru.intertrust.cmj.af.so.SOApplication);

function queryCreate(object) {
	var values = object.tuning().getValues();

	//заполнение секции "Инициатор"
	var user = AFSession.get().currentUser().getBeard();
	var org = user.getOrganization().getBeard();
	var filial = getParentSeparateUnit(user);
	var parentDep = getParentIndependentUnit(user);
	var parentHierarchy = getParentDepartmentHierarchyString(user);
	var post = user.originalData().getPostName();
	var tabNum = user.getTabNum();
	var phone = AFSession.get().currentUser().getPerson().contactsInfo().getPhoneInternal();

	values.put("initOrg", TuningHelper.createPropertyValue(org, object.tuning().getSchema().getProperty("initOrg")));
	values.put("initBranch", TuningHelper.createPropertyValue(filial, object.tuning().getSchema().getProperty("initBranch")));
	values.put("initDepartment", TuningHelper.createPropertyValue(parentDep, object.tuning().getSchema().getProperty("initDepartment")));
	values.put("initHierDepatment", TuningHelper.createPropertyValue(parentHierarchy, object.tuning().getSchema().getProperty("initHierDepatment")));
	values.put("initiator", TuningHelper.createPropertyValue(user, object.tuning().getSchema().getProperty("initiator")));
	values.put("initPost", TuningHelper.createPropertyValue(post, object.tuning().getSchema().getProperty("initPost")));
	values.put("initPhone", TuningHelper.createPropertyValue(phone, object.tuning().getSchema().getProperty("initPhone")));
	values.put("initTabNum", TuningHelper.createPropertyValue(tabNum, object.tuning().getSchema().getProperty("initTabNum")));
}

/**
   Вычисление вышестоящего Самостоятельного подразделения. Если самостоятельное подразделение не будет вычислено, берется обособленное
*/
function getParentIndependentUnit(beard) {
	var parent = getParent(beard); //SOBeard
	var party = parent.originalData().getParty(); //SOParty
	if (party instanceof SOUnitStructure) {
		if (party.isIndependent() || party.isSeparate()) {
			return parent;
		}
	}
	if (party instanceof SOUnitOrganization) {
		return parent;
	}
	return getParentIndependentUnit(parent);
}

/**
   Вычисление вышестоящего Филиала/ГО по признаку Обособленное подразделение.
*/
function getParentSeparateUnit(beard) {
	if (beard.originalData().getType().toString().equals("SYS_ROLE")) {
		var branchFR = beard.originalData().getParty().getHeadOrBranchOffice();
		if (branchFR != null) {
			return branchFR.getBeard();
		}
	}
	var parent = getParent(beard); //beard.getParent(); //SOBeard
	var party = parent.originalData().getParty(); //SOParty
	if (party instanceof SOUnitStructure) {
		if (party.isSeparate()) {
			return parent;
		}
	}
	if (party instanceof SOUnitOrganization) {
		return parent;
	}
	return getParentSeparateUnit(parent);
}

/**
	Вычисление иерархии подразделений в виде строки
*/
function getParentDepartmentHierarchyString(beard) {
	var namesList = new ArrayList();
	namesList = getParentDepartmentHierarchy(beard, namesList);
	//преобразуем в строку
	//var result = beards.stream()
	//    .map(name -> name.length()>50 ? (StringUtils.left(name,47)+"...") : name)
	//    .collect(Collectors.joining("\n\\"));
	var result = "";
	for (var i = 0; i < namesList.size(); i++) {
		var name = namesList.get(i);
		var shortName = name.length() > 100 ? (org.apache.commons.lang3.StringUtils.left(name, 97) + "...") : name;
		if (result.equals("")) {
			result = shortName;
		} else {
			result = result + "\n\\" + shortName;
		}
	}
	return result;
}

/**
   Вычисление иерархии подразделений вплоть до самостоятельного подразделения
*/
function getParentDepartmentHierarchy(beard, namesList) {
	var parent = getParent(beard);
	var party = parent.originalData().getParty();
	if (party instanceof SOUnitDepartment) {
		namesList.add(party.getFullName());
		if (party.isSeparate()) {
			return namesList;
		} else {
			return getParentDepartmentHierarchy(parent, namesList);
		}
	} else if (party instanceof SOUnitOrganization) {
		namesList.add(party.getFullName());
		return namesList;
	} else if (party instanceof AppointmentHead) {
		namesList.add(party.getBeard().originalData().getShortName());
		return getParentDepartmentHierarchy(parent, namesList);
	}
	return namesList;
}

/**
	Получение вышестоящего подразделения/РВЗ
*/
function getParent(beard) {
	var parent = beard.getParent();
	if (parent != null) {
		return parent;
	}
	var parentDocId = null;
	var unidArr = beard.getUNID().split(":");
	var tnUnid = unidArr[0] + "-TN:" + unidArr[1];
	var tunApp = AFSession.get().getApplication(TunableObjectApplication.class);
	var tnObj = tunApp.getEntityByUNID(tnUnid);
	if (tnObj != null) {
		var parentUnit = tnObj.tuning().getValues().get("parentUnit");
		if (parentUnit != null && parentUnit.getValues().get("basedocid") != null) {
			parentDocId = parentUnit.getValues().get("basedocid").getValue();
		}
	}
	if (parentDocId != null) {
		var soApp = AFSession.get().getApplication(SOApplication.class);
		var soObj = soApp.getEntityByUNID(unidArr[0] + ":" + parentDocId);
		if (soObj != null) {
			if (soObj instanceof SOParty) {
				return soObj.getBeard();
			} else if (soObj instanceof SOUnitPost && soObj.appointments().getCurrent() != null) {
				return soObj.appointments().getCurrent().getBeard();
			} else {
				throw ("Ошибка при поиске родительского элемента - soObj " + soObj.getClass().getName());
			}
		}
	}
	return null;
}