Contract contract = findEntity(Polis.class, serrenDetails.polisID).getContract();
Collaborator collaborator = findEntity(Collaborator.class, getCollaboratorId());
if (contract.getLpu() != null && contract.getLpu().getId() != collaborator.getLpu().getId()) {
throw new EDataIntegrity("Указанный контракт не заключен с данной клиникой");
}
ServiceRender serren = new ServiceRender();
//date; //дата назначения услуги - если нет права создавать другим числом то только сегодняшняя дата
if (DateTimeUtils.belongsToCurrentDay(serrenDetails.date)
|| hasRight(UserRightsSet.WRITE_STATISTIC_MEDICAL_DATA)) {
serren.setDate(serrenDetails.date);
} else {
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) {