ServiceRenderDetails d = (ServiceRenderDetails) details;
entity.setDate(d.date);
CollaboratorFunctions cf = d.functionsID == 0 ? null : findEntity(CollaboratorFunctions.class, d.functionsID);
//особо заебатые случаи проверки вынесены сюды
if (!entity.isRendered()) {//услуга не оказана
//услуга не оказана
if (d.functionsID != 0
&& findEntity(CollaboratorFunctions.class, d.functionsID).getCollaborator().getId() != getCollaboratorId()
&& !hasRight(UserRightsSet.WRITE_STATISTIC_MEDICAL_DATA)) {
throwNeedAdminSecurityException("У вас недостаточно прав, чтоб оказать услугу от имени другого пользователя");
}
if (d.functionsID != 0 && d.servPlaceID == 0) {
throw new EDataIntegrity("При оказании услуги необходимо указывать место обслуживания");
}
if (d.functionsID != 0
&& !DateTimeUtils.belongsToCurrentDay(d.renderDate)
&& !hasRight(UserRightsSet.WRITE_STATISTIC_MEDICAL_DATA)) {
throwNeedAdminSecurityException("У вас недостаточно прав, чтоб оказать услугу другой датой");
}
entity.setRenderedDate(d.functionsID == 0 ? null : d.renderDate);
//Если в услуге указана специальность врача, которым должна быть оказана услуга,
//то cf должен соответствовать
if (entity.getSpeciality() != null) {
if (entity.getSpeciality().getId() != cf.getSpeciality().getId()) {
throw new EDataIntegrity();
}
}
entity.setFunctions(cf);
if (d.functionsID != 0) {
//при оказании услуги анализ убираем ее из расписания анализов
Field fields[] = {
new Field("serviceRender", entity),
};
List<Checkup> list = findEntityList(Checkup.class, fields);
for (int i = 0; i < list.size(); i++) {
Checkup checkup = list.get(i);
checkup.setCheckupShedule(null);
manager.merge(checkup);
}
}
}
else {//услуга оказана
if (d.renderDate == null && d.functionsID != 0) {//отмена оказания
throwNeedAdminSecurityException("У вас недостаточно прав, чтоб отметить услугу как неоказанную");
entity.setRenderedDate(null);
entity.setFunctions(null);
} else if (!entity.getRenderedDate().equals(d.renderDate)) {
throwNeedAdminSecurityException("У вас недостаточно прав для смены даты оказания услуги");
entity.setRenderedDate(d.renderDate);
} else if (entity.getFunctions() != null && entity.getFunctions().getId() != d.functionsID) {
throwNeedAdminSecurityException("У вас недостаточно прав для смены сотрудника, оказавшего услугу");
entity.setFunctions(d.functionsID == 0 ? null : findEntity(CollaboratorFunctions.class, d.functionsID));
}
}
if (d.uet == 0) {
throw new ClipsServerException("Не указана условная единица трудоемкости\n" +
"(УЕТ = 1 для не стоматологических приемов)");
}
if (cf != null) {
ReceptionType recType = cf.getReceptionType();
String code = recType.getExtKey();
if (!code.contains("29") && d.uet != ServiceRender.DEFAULT_UET) {
throw new ClipsServerException("Для не стоматологического приема указан УЕТ отличный от единицы");
}
}