&& 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("Для не стоматологического приема указан УЕТ отличный от единицы");
}
}
entity.setUet(d.uet);
entity.setReceived(d.received);
entity.setDiscount(d.discount);
entity.setDiscountCard(d.cardID == 0 ? null : findEntity(DiscountCard.class, d.cardID));
entity.setCancelled(d.cancelled);
entity.setRepeat(d.repeat);
entity.setPacketService(d.packetServiceID == 0 ? null : findEntity(PacketService.class, d.packetServiceID));
entity.setDisease(d.diseaseID == 0 ? null : findEntity(Disease.class, d.diseaseID));
entity.setPolis(findEntity(Polis.class, d.polisID));
entity.setService(findEntity(Service.class, d.serviceID));
entity.setDirector(findEntity(Collaborator.class, d.directorID));
entity.setPlace(d.servPlaceID == 0 ? null : findEntity(ServicingPlace.class, d.servPlaceID));
entity.setFunctions(d.functionsID == 0 ? null : findEntity(CollaboratorFunctions.class, d.functionsID));
ServiceRender ref = d.referencedID == 0 ? null : findEntity(ServiceRender.class, d.referencedID);
if(ref != null
&&ref.getDisease().getId() != entity.getDisease().getId()) {
throw new EDataIntegrity("Связанные услуги должны быть в одном заболевании");
}
entity.setReferenced(ref);
}