public SerrenMod createNewSerren(ServiceRenderDetails serrenDetails) throws ClipsServerException {
AuditDoc<ServiceRender> auditDoc = new AuditDoc<ServiceRender>(null, getCollaborator());
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 проверка соответствия пациента по карте и ЭМК