/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package beans.doctor.direction;
import framework.beans.EntityDetails;
import beans.doctor.MedicalDataBean;
import beans.cec.entity.CommitteeDirection;
import beans.directory.direction.entity.DirectionType;
import beans.directory.mkb10.entity.Mkb10;
import beans.directory.service.entity.Service;
import beans.directory.simple.entities.CommitteeReason;
import beans.service.ServiceRender;
import framework.audit.AuditDoc;
import framework.generic.ClipsServerException;
import framework.generic.EDataIntegrity;
import framework.generic.ESecurity;
import java.util.Date;
import java.util.List;
import javax.ejb.EJBException;
import javax.ejb.Stateful;
/**
* Security - Ok.
* Integrity - may be Ok.
* @author axe
*/
@Stateful(mappedName="clips-beans/DirectionBean")
public class DirectionBean extends MedicalDataBean<Direction>
implements DirectionBeanRemote {
public DirectionBean() {
super(Direction.class);
}
/**
* Обновляет данные сущности.
* @param details новые детали сущности
* @throws EJBException в случае если обновление отвергнуто системой
* безопастности либо произошла ошибка
* @return идентификатор сущности
* @security
* Установка прав для мед. данных Рецептов, рекоммендаций, направлений, противопоказаний,
* диагнозов и осмотров. Читать можно только по READ_MEDICAL_DATA.
* Изменять и удалять по WRITE_MEDICAL_DATA_DURING_DAY и WRITE_MEDICAL_DATA_ANY_TIME.
* Для осмотров ещё два, менее мощных права WRITE_CHECKUP_DURING_DAY и WRITE_CHECKUP_ANY_TIME.
* XXX_DURING_DAY - позволяет писать данные, если услуга не выполнена или выполнена в течении
* текущего дня, изменять данные может только сотрудник, создавший запись.
* XXX_ANY_TIME - позволяет редактировать любую запись, без ограничений.
*/
@Override
protected void onUpdate(Direction entity, EntityDetails details,
AuditDoc auditDoc, List<AuditDoc> auditDocList)
throws ClipsServerException{
super.onUpdate(entity, details, auditDoc, auditDocList);
DirectionDetails d = (DirectionDetails) details;
if(entity.getId() != 0) {
if(entity.getServiceRender().getId() != d.serviceRenderID) {
throw new ESecurity("Cмена услуги недопустима");
}
} else {
//never use client date +
entity.setDate(new Date());
entity.setServiceRender(findEntity(ServiceRender.class, d.serviceRenderID));
}
entity.setCommitteeReason(d.reasonID == 0 ? null : findEntity(CommitteeReason.class, d.reasonID));
entity.setDescription(d.description);
entity.setDirectionType(d.typeID == 0 ? null : findEntity(DirectionType.class, d.typeID));
entity.setMkb10(d.mkbID == 0 ? null : findEntity(Mkb10.class, d.mkbID));
entity.setOrdered(d.ordered);
entity.setService(d.serviceID == 0 ? null : findEntity(Service.class, d.serviceID));
}
@Override
protected void onRemove(Direction entity, List<AuditDoc> audit) throws ClipsServerException {
super.onRemove(entity, audit);
Field[] fields = new Field[]{
new Field("direction", entity, Field.OPERATOR_EQUAL)
};
if (getEntityCount(CommitteeDirection.class, fields) > 0) {
throw new EDataIntegrity("Невозможно удалить направление на комиссию, комиссия уже назначена");
}
}
}