if (getId() == 0) {
checkCommandAccessibility(COMMAND_CREATE);
actionPreformed = true;
//System.out.println("Открытие больничного");
if (d.entID != 0 && d.otherDirection != null) {
throw new EDataIntegrity("Запрещено указывать две организации, куда выдан больничный");
}
entity.setEnterprise(d.entID == 0 ? null: findEntity(Enterprise.class, d.entID));
entity.setOtherDirection(d.otherDirection);
Diagnosis diagnosis = findEntity(Diagnosis.class, d.diagOpenID);
Sicklist referenced = d.refID == 0? null: findEntity(Sicklist.class, d.refID);
entity.setReferenced(referenced);
//обновляем head
if(referenced != null) {
Sicklist head = referenced.getHead();
if(head == null) {
head = referenced;
}
entity.setHead(head);
}
entity.setComment(d.comment);
entity.setDisabilityType(findEntity(DisabilityType.class, d.disabID));
// доделал код виталия, сотрудника создавшего больничный, можно установить по первому sickLong
// (мое имхо отчеты будет выбирать страшний геморой)
if (d.openerID != 0){
if (d.altOpener != null){
throw new EDataIntegrity("Указано одновременно два сотрудника, открывших больничный лист");
}
if (d.altLpu != null){
throw new EDataIntegrity("Сотрудниник этой поликлиники выдал больнчный альтернативной. Внутренняя ошибка.");
}
entity.setOpener(findEntity(Collaborator.class, d.openerID));
entity.setAltlpu(null);
entity.setAltopener(null);
}else{
if (d.altLpu == null){
throw new EDataIntegrity("Не указанна организация выдавшая больничный");
}
if (d.altOpener == null || d.altOpener.trim().length() < 3){
throw new EDataIntegrity("Не указан сотрудник, открывший больничный лист");
}
entity.setOpener(null);
entity.setAltlpu(d.altLpu);
entity.setAltopener(d.altOpener);
}
entity.setDateOpen(d.dateOpen);
// после того как был установлен Referenced
checkValidSicklistDiagnosis(entity, diagnosis);
if (referenced != null){
if (referenced.getDiagClose() == null){
throw new EDataIntegrity("Попытка продления незакрытого больничного листа, сперва закройте больничный лист");
}
if (referenced.getDiagOpen().getServiceRender().getDisease().getEmc().getId()
!= diagnosis.getServiceRender().getDisease().getEmc().getId()){
throw new EDataIntegrity("Продляемый больничный находится в другой медицинской карте");
}
}
entity.setDiagOpen(diagnosis);
if (d.sickLongList == null || d.sickLongList.size() == 0){
throw new EDataIntegrity("Не установлена дата окончания действия больничного");
}
}else{
if (false
|| !isEntityEqualID(entity.getEnterprise(), d.entID)
|| !nullEqual(entity.getOtherDirection(), d.otherDirection)
|| !isEntityEqualID(entity.getReferenced(), d.refID)
|| !isEntityEqualID(entity.getDisabilityType(), d.disabID)
|| !isEntityEqualID(entity.getOpener(), d.openerID)
|| !nullEqual(entity.getAltlpu(), d.altLpu)
|| !nullEqual(entity.getAltopener(), d.altOpener)
|| !entity.getDateOpen().equals(d.dateOpen)
|| !nullEqual(entity.getOtherDirection(), d.otherDirection)
|| !isEntityEqualID(entity.getDiagOpen(), d.diagOpenID)
){
throw new EDataIntegrity("Запрещено свободное редактирование больничного листа");
}
}
return actionPreformed;
}