Package beans.doctor.medexam

Source Code of beans.doctor.medexam.MedexamBean

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package beans.doctor.medexam;

import beans.doctor.PacketService;
import beans.doctor.disease.Disease;
import framework.beans.EntityDetails;
import framework.beans.FacadeBean;
import framework.beans.security.BeanRights;
import framework.generic.ClipsServerException;
import framework.generic.EDataIntegrity;
import java.util.List;
import javax.ejb.Stateful;
import beans.UserRightsSet;
import beans.directory.simple.entities.ProfChekupResult;
import beans.service.ServiceRender;
import beans.service.ServiceRenderBean;
import beans.service.ServiceRenderBeanLocal;
import beans.service.medexam.MedSerrenResult;
import beans.service.medexam.MedSerrenResultDetails;
import beans.service.medexam.Medexam;
import beans.service.medexam.MedexamDetails;
import framework.audit.AuditDoc;
import java.util.ArrayList;
import javax.ejb.EJB;

/**
* @security ok
* @author axe
*/
@Stateful(mappedName="clips-beans/MedexamBean")
public class MedexamBean extends FacadeBean<Medexam> implements MedexamBeanRemote {

    @EJB
    ServiceRenderBeanLocal srbl;

    public MedexamBean() {
        super(Medexam.class);
    }

    @Override
    protected void initBeanRights() throws ClipsServerException {
        int [] r = new int[4];
        r[COMMAND_READ] = RightPresence(UserRightsSet.READ_MEDICAL_DATA.id);
        r[COMMAND_MODIFY] = RightPresence(UserRightsSet.WRITE_MEDEXAM_RESULT.id);
        r[COMMAND_REMOVE] = RightPresence(UserRightsSet.WRITE_MEDEXAM_RESULT.id);
        rights = new BeanRights(r);
    }

  @Override
  protected void onRemove(Medexam entity, List<AuditDoc> auditDocLsit) throws ClipsServerException {
    super.onRemove(entity, auditDocLsit);
        int entityCount = getEntityCount(MedSerrenResult.class,
                                        new Field[]{new Field("results", "", Field.OPERATOR_NOT_NULL),
                                                    new Field("serren.disease", entity.getDisease())});
        if (entityCount>0){
            throwNeedAdminSecurityException("Недостаточно прав для удаления медосмотра, имеющего результаты");
        }
        List<MedSerrenResult> msrList = findEntityList(MedSerrenResult.class, "serren.disease", entity.getDisease());
        for (int i = 0; i < msrList.size(); i++) {
            MedSerrenResult msr = msrList.get(i);
            ServiceRender serren = msr.getSerren();
            List<ServiceRender> findEntityList = findEntityList(ServiceRender.class, "referenced", serren);
            if (findEntityList.size() != 0) {
                for (ServiceRender referenced : findEntityList) {
                    srbl.initByID(referenced.getId(), getSessionId());
                    ServiceRenderBean.breakPacket(manager, referenced, getCollaborator(), auditDocLsit);
                    srbl.onRemove(referenced, auditDocLsit);
                    ServiceRenderBean.remove(manager, referenced, getCollaborator(), auditDocLsit);
                }
            }
            srbl.initByID(serren.getId(), getSessionId());
            ServiceRenderBean.breakPacket(manager, serren, getCollaborator(), auditDocLsit);
            srbl.onRemove(serren, auditDocLsit);
            ServiceRenderBean.remove(manager, serren, getCollaborator(), auditDocLsit);
        }
        Disease disease = entity.getDisease();
        manager.remove(disease);
  }



    /**
     * Обновляет данные сущности.
   * @param entity
   * @param details новые детали сущности
     * @throws ClipsServerException
     */
    @Override
    protected void onUpdate(Medexam entity, EntityDetails details,
            AuditDoc auditDoc, List<AuditDoc> auditDocList) throws ClipsServerException{
        MedexamDetails d = (MedexamDetails) details;
        //Разграничение по действиям
        //открытие больничного
    if (getId() == 0) {
            throw new EDataIntegrity("Нельзя создать медосмотр данным способом");
    } else {
            checkCommandAccessibility(COMMAND_MODIFY);
            if (entity.getDisease().getId() != d.diseaseID) {
                throw new EDataIntegrity("Нельзя заменять заболевание медосмотра");
            }
            if (entity.getMedexamType().getId() != d.medexamTypeID) {
                throw new EDataIntegrity("Нельзя менять тип у медосмотра");
            }
            if (entity.getId() != d.id) {
                throw new EDataIntegrity("Попытка подмены ID медосмотра");
            }
            entity.setResult(d.resultID == 0 ? null : findEntity(ProfChekupResult.class, d.resultID));
    }
    }

  @Override
  protected void afterUpdate(Medexam entity, boolean isNewEntity,
            EntityDetails details, List<AuditDoc> audit) throws ClipsServerException {
    super.afterUpdate(entity, isNewEntity, details, audit);
    initBeanRights();
  }


    /**
     * Возвращает список результатов медосмотров по услугам
     * @return
     * @throws framework.generic.ClipsServerException
     */
    @Override
    public List<MedSerrenResultDetails> getMedSerrenResultList() throws ClipsServerException {
        checkCommandAccessibility(COMMAND_READ);
//        List<MedSerrenResult> entityList = findEntityList(MedSerrenResult.class, "medexam", getExistentEntity());
        List<MedSerrenResult> entityList
                = findEntityList(MedSerrenResult.class,
                                new Field[]{new Field("serren.disease", getExistentEntity().getDisease())});
        List<MedSerrenResultDetails> res = new ArrayList<MedSerrenResultDetails>();
        for (int i = 0; i < entityList.size(); i++) {
            MedSerrenResult msr = entityList.get(i);
            res.add(msr.getDetails(this));
        }
        return res;
    }

    /**
     * Сохранение результата по услуге
     * @param details
     * @throws framework.generic.ClipsServerException
     */
    @Override
    public int setMedSerrenResult(MedSerrenResultDetails details) throws ClipsServerException {
        MedSerrenResult entity = findEntity(MedSerrenResult.class, details.id);
        //Проверка полей - ничо менять нельзя
        if (entity.getSerren().getId() != details.serrenID) {
            throw new EDataIntegrity("Попытка подмены результатов медосмотра");
        }
        //Проверка безопасности - выставлять результаты может только оказавший услугу, либо суперюзер
        if (entity.getSerren().getFunctions() == null
                || entity.getSerren().getFunctions().getCollaborator().getId() != getCollaboratorId()) {
            throwNeedAdminSecurityException("Выставить результат может только сотрудник, оказавший услугу");
        }
        entity.setResults(details.resultID == 0 ? null : findEntity(ProfChekupResult.class, details.resultID));
        manager.persist(entity);
        return entity.getId();
    }

    @Override
    public String getPacketTitle() throws ClipsServerException {
        List<ServiceRender> list = findEntityList(ServiceRender.class, "disease", getExistentEntity().getDisease());
        if (list.size() == 0) {
            return "Неизвестный медосмотр";
        } else {
            PacketService packet = list.get(0).getPacketService();
            if (packet == null) {
                return "Неизвестный медосмотр";
            }
            return packet.getPacketTemplate().getTitle();
        }
    }
}
TOP

Related Classes of beans.doctor.medexam.MedexamBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.