/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package beans.lpu;
import framework.beans.EntityDetails;
import framework.beans.FacadeBean;
import framework.beans.security.BeanRights;
import beans.user.collaborator.entities.Collaborator;
import java.util.List;
import framework.generic.ClipsServerException;
import javax.ejb.EJBException;
import javax.ejb.Stateful;
import beans.UserRightsSet;
import beans.contract.entity.Contract;
import beans.directory.cabinet.entity.Cabinet;
import beans.directory.district.entity.District;
import beans.directory.lpu.entity.Lpu;
import beans.directory.lpu.entity.LpuDetails;
import beans.directory.packet.entity.PacketTemplate;
import beans.directory.simple.entities.ClinicType;
import beans.directory.simple.entities.Insurer;
import beans.laboratory.Laboratory;
import beans.user.client.entity.Client;
import framework.audit.AuditDoc;
import framework.beans.address.entities.Address;
import framework.beans.address.entities.AddressDetails;
import framework.beans.address.entities.AddressObject;
import framework.generic.EDataIntegrity;
import framework.generic.ESecurity;
import framework.security.SecurityChecker;
/**
* Security - Ok.
* @author axe
*/
@Stateful(mappedName="clips-beans/LpuBean")
public class LpuBean extends FacadeBean<Lpu>
implements LpuBeanRemote {
public LpuBean() {
super(Lpu.class);
}
@Override
protected void initBeanRights() {
int [] r = new int[6];
int cmr = RightPresence(UserRightsSet.WRITE_REGION_ADMIN_DIRECTORY.id);
r[COMMAND_CREATE] = cmr;
r[COMMAND_MODIFY] = RightPresence(UserRightsSet.WRITE_CLINIC_ADMIN_DIRECTORY.id);
r[COMMAND_REMOVE] = cmr;
rights = new BeanRights(r);
}
/**
* Обновляет данные сущности.
* @param details новые детали сущности
* @throws EJBException в случае если обновление отвергнуто системой
* безопастности либо произошла ошибка
* @return идентификатор сущности
*/
@Override
protected void onUpdate(Lpu entity, EntityDetails details,
AuditDoc auditDoc, List<AuditDoc> auditDocList)
throws ClipsServerException {
LpuDetails d = (LpuDetails) details;
Lpu lpu = entity;
if (details.getId() != 0) {
//Проверка на модификацию только своей клиники
Collaborator collab = findEntity(Collaborator.class, getCollaboratorId());
if (collab.getLpu().getId() != lpu.getId()
&& RightPresence(UserRightsSet.WRITE_REGION_ADMIN_DIRECTORY.id) < 0) {
throw new ESecurity(SecurityChecker.getClientHasNoRightMsg(UserRightsSet.WRITE_REGION_ADMIN_DIRECTORY.id));
}
}
lpu.setTitle(d.title);
lpu.setTitleShort(d.title_short);
if (d.lpuCode == null) {
throw new ClipsServerException("Не указан код ЛПУ в кодировке ТФОМС");
}
lpu.setLpuCode(d.lpuCode);
if (d.ogrn == null) {
throw new ClipsServerException("Не указан ОГРН код ЛПУ");
}
lpu.setOgrn(d.ogrn);
if (d.chiefDoctor == 0) {
throw new ClipsServerException("Не указан главврач ЛПУ");
}
lpu.setChiefDoctor(findEntity(Collaborator.class, d.chiefDoctor));
if (d.accountant == 0) {
throw new ClipsServerException("Не указан бухгалтер ЛПУ");
}
lpu.setAccountant(findEntity(Collaborator.class, d.accountant));
if (d.clinicType == 0) {
throw new ClipsServerException("Не указан тип ЛПУ");
}
if (d.insurer == 0) {
throw new ClipsServerException("Не указана страховая компания по умолчанию");
}
if (d.subdivisionCode == null) {
throw new ClipsServerException("Не указан код подразделение ЛПУ");
}
if (d.branch == null) {
throw new ClipsServerException("Не указан код филиала РФОМС");
}
lpu.setPhone(d.phone == null ? "" : d.phone);
lpu.setFax(d.fax == null ? "" : d.fax);
lpu.setEmail(d.email == null ? "" : d.email);
lpu.setOkpo(d.okpo == null ? "" : d.okpo);
lpu.setOkonh(d.okonh == null ? "" : d.okonh);
lpu.setOkved(d.okved == null ? "" : d.okved);
lpu.setOkogu(d.okogu == null ? "" : d.okogu);
lpu.setOkopf(d.okopf == null ? "" : d.okopf);
lpu.setOkfc(d.okfc == null ? "" : d.okfc);
lpu.setClinicType(findEntity(ClinicType.class, d.clinicType));
lpu.setInsurer(findEntity(Insurer.class, d.insurer));
lpu.setSubdivisionCode(d.subdivisionCode);
lpu.setBranch(d.branch);
Address address = lpu.getAddress();
AddressDetails ad = d.addressDetails;
if (ad != null && ad.objectId != 0) {
if (address == null){
address = new Address();
}
address.setAddressObject(findEntity(AddressObject.class, ad.objectId));
address.setBuilding(ad.building);
address.setFlat(ad.flat);
saveEntity(address);
lpu.setAddress(address);
}else{
throw new EDataIntegrity("Не указан адрес");
}
}
@Override
protected void onRemove(Lpu entity, List<AuditDoc> auditDocList) throws ClipsServerException {
Field fieldLpu[] = {
new Field("lpu", entity),
};
Field fieldDistrictLpu[] = {
new Field("district.lpu", entity),
};
if (getEntityCount(Collaborator.class, fieldLpu) > 0) {
throw new EDataIntegrity("С клиникой связаны сотрудники, удаление невозможно");
}
if (getEntityCount(Client.class, fieldDistrictLpu) > 0) {
throw new EDataIntegrity("У клиники существуют пациенты, удаление невозможно");
}
if (getEntityCount(District.class, fieldLpu) > 0) {
deleteEntityList2(District.class, fieldLpu, auditDocList);
}
if (getEntityCount(PacketTemplate.class, fieldLpu) > 0) {
throw new EDataIntegrity("С клиникой связаны шаблоны пакетов услуг, удаление невозможно");
}
if (getEntityCount(Contract.class, fieldLpu) > 0) {
throw new EDataIntegrity("С клиникой связаны контракты, удаление невозможно");
}
if (getEntityCount(Laboratory.class, fieldLpu) > 0) {
throw new EDataIntegrity("С клиникой связаны лаборатории, удаление невозможно");
}
if (getEntityCount(Cabinet.class, fieldLpu) > 0) {
throw new EDataIntegrity("С клиникой связаны кабинеты, удаление невозможно");
}
}
}