throw new ESecurity(SecurityChecker.getClientHasNoRightMsg(UserRightsSet.WRITE_STATISTIC_MEDICAL_DATA.id));
}
//renderDate; //дата оказания - нулл
if (serrenDetails.renderDate != null) {
throw new ClipsServerException("Нельзя создавать оказанную услугу");
} else {
serren.setRenderedDate(null);
}
//discount; //Скидка в процентах - пофиг, проверка не здесь
serren.setDiscount(serrenDetails.discount);
//cancelled; //флаг отменена - false
if (serrenDetails.cancelled == true) {
throw new ClipsServerException("Нельзя создавать отмененную услугу");
} else {
serren.setCancelled(serrenDetails.cancelled);
}
//repeat; //повторы услуги - 0
if (serrenDetails.repeat != 0) {
throw new ClipsServerException("Нельзя создавать услугу, оказанную повторно");
} else {
serren.setRepeat(serrenDetails.repeat);
}
//polisID; // - != 0
Polis polis;
if (serrenDetails.polisID == 0) {
throw new ClipsServerException("Нельзя создавать услугу без указания полиса");
} else {
polis = findEntity(Polis.class, serrenDetails.polisID);
serren.setPolis(polis);
}
//collaboratorID; // - 0
if (serrenDetails.functionsID != 0) {
throw new ClipsServerException("Нельзя создавать оказанную услугу");
} else {
serren.setFunctions(null);
}
//directorID; // - если нет права создавать от другого имени, то только текущий сотрудник
if (getCollaboratorId() == serrenDetails.directorID
|| hasRight(UserRightsSet.WRITE_STATISTIC_MEDICAL_DATA)) {
Collaborator director = findEntity(Collaborator.class, serrenDetails.directorID);
serren.setDirector(director);
} else {
throw new ESecurity(SecurityChecker.getClientHasNoRightMsg(UserRightsSet.WRITE_STATISTIC_MEDICAL_DATA.id));
}
//packetServiceID; // - пофиг
if (serrenDetails.packetServiceID == 0) {
serren.setPacketService(null);
} else {
serren.setPacketService(findEntity(PacketService.class, serrenDetails.packetServiceID));
}
//diseaseID; // - пока пофиг TODO проверка соответствия пациента по полису и ЭМК
if (serrenDetails.diseaseID == 0) {
serren.setDisease(null);
} else {
Disease disease = findEntity(Disease.class, serrenDetails.diseaseID);
if (serren.getPolis().getClient().getId() != disease.getEmc().getClient().getId()) {
throw new EDataIntegrity("Ошибка в коде назначения услуги - полис не соответствует ЕМК");
}
serren.setDisease(disease);
}
//cardID; // - пока пофиг TODO проверка соответствия пациента по карте и ЭМК
if (serrenDetails.cardID == 0) {
serren.setDiscountCard(null);
} else {
serren.setDiscountCard(findEntity(DiscountCard.class, serrenDetails.cardID));
}
Service service = findEntity(Service.class, serrenDetails.serviceID);
//servPlaceID; // - пофиг
//нет, не пофиг
//а если не указан то все равно пофиг
//голосованием (вип ильшит петр) решили что пофиг (тем более нехорошо если данные корректируются бином)
/*if (service.getReqType() != null) {
if (service.getReqType().getId() == ReqType.TYPE_POLYCLINIC){
serrenDetails.servPlaceID = ServicingPlace.SP_POLYCLINIC;
}else if (service.getReqType().getId() == ReqType.TYPE_HOME){
serrenDetails.servPlaceID = ServicingPlace.SP_HOME;
}
}*/
if (serrenDetails.servPlaceID == 0) {
serren.setPlace(null);
} else {
serren.setPlace(findEntity(ServicingPlace.class,serrenDetails.servPlaceID));
}
//referenced; // - проверка возможности оказания данной услуги в рамках referenced
if (serrenDetails.referencedID != 0) {
ServiceRender referenced = findEntity(ServiceRender.class, serrenDetails.referencedID);
Field[] f = new Field[]{
new Field("pservice", referenced),
new Field("cservice", service),
};
if (getEntityCount(ServiceToService.class, f) > 0) {
serren.setReferenced(referenced);
} else {
throw new ClipsServerException("Данную услугу нельзя оказывать в рамках указанной");
}
} else {
serren.setReferenced(null);
}
//serviceID; // услуга - проверка наличия в договоре (учитывая референсед)
//functionsID //Проверить есть ли услуга с данным типом услуги в договоре
//делается одновременно чтоб не делать 2 запроса
String sql;
CollaboratorFunctions functions = null;
ReceptionType receptionType = null;
if (serrenDetails.referencedID == 0) {
if (serrenDetails.functionsID == 0) {
sql = "SELECT count(a) FROM ServicePrice a WHERE " +
"a.contract=:contract " +
"AND a.service=:service ";
} else {
functions = findEntity(CollaboratorFunctions.class, serrenDetails.functionsID);
receptionType = functions.getReceptionType();
sql = "SELECT count(a) FROM ServicePrice a WHERE " +
"a.contract=:contract " +
"AND a.service=:service " +
"AND (a.receptionType IS NULL OR a.receptionType=:receptionType)";
}
Query q = manager.createQuery(sql);
q.setParameter("contract", polis.getContract());
q.setParameter("service", service);
if (receptionType != null) {
q.setParameter("receptionType", receptionType);
}
long c = (Long) q.getSingleResult();
if (c == 0) {
if (serrenDetails.functionsID == 0) {
throw new ClipsServerException("Услуга отсутствует в контракте");
} else {
throw new ClipsServerException("Данную услугу нельзя оказывать при данном типе приема");
}
}
serren.setFunctions(functions);
serren.setService(service);
} else {