Package beans.doctor.checkup

Source Code of beans.doctor.checkup.CheckupBean

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package beans.doctor.checkup;

import beans.doctor.MedicalDataBean;
import framework.beans.security.BeanRights;
import framework.beans.EntityDetails;
import framework.beans.GenericEntity;
import beans.DEC.HasSerren;
import beans.DEC.HasServiceRenderID;
import beans.directory.checkuptype.entity.CheckupType;
import beans.doctor.checkup.dicom.CheckupDicom;
import beans.doctor.checkup.dicom.CheckupDicomDetails;
import beans.doctor.checkup.shedule.CheckupShedule;
import beans.service.ServiceRender;
import framework.generic.ClipsServerException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateful;
import framework.security.RightChecker;
import beans.UserRightsSet;
import beans.user.collaborator.entities.Collaborator;
import beans.user.collaborator.entities.CollaboratorFunctions;
import framework.audit.AuditDetails;
import framework.audit.AuditDoc;
import framework.beans.ModificationInfo;

/**
* @security - Ok.
* Integrity - may be Ok.
* @author axe
*/
@Stateful(mappedName="clips-beans/CheckupBean")
public class CheckupBean extends MedicalDataBean<Checkup>
        implements CheckupBeanRemote {

    private CheckupShedule shedule;

    public CheckupBean() {
        super(Checkup.class);
    }

    @Override
    protected void initBeanRights() throws ClipsServerException {
        /* Для чекапов
         * право на чтение расширяется правом READ_ANALYSE_LIST
         * право на изменение расширяется правом WRITE_ANALYSE_DURING_DAY или правом WRITE_ANALYSE_ANY_TIME
         */
        if (getId() != 0) {
            serviceRender = getExistentEntity().getServiceRender();
        }
        int[] r = getPrelimMedicalDataRights();
        if (r[COMMAND_READ] <= 0) {
            r[COMMAND_READ] = RightPresence(UserRightsSet.READ_ANALYSE_LIST.id);
        }
        if (r[COMMAND_MODIFY] <= 0 && serviceRender != null) {
            Checkup checkup = (getId() == 0) ? null : getExistentEntity();
            if (checkup != null && checkup.getCheckupType().isAnalyse()) {
                int modifyRight = 0;
                if (RightPresence(UserRightsSet.WRITE_ANALYSE_DURING_DAY.id) > 0){
                    //Начинаем проверять со слабого права
                    modifyRight = serviceRender.canWriteDuringDay(
                            isSuperUser(),
                            UserRightsSet.WRITE_ANALYSE_DURING_DAY,
                            getCollaboratorId());
                }
                if (RightPresence(UserRightsSet.WRITE_ANALYSE_ANY_TIME.id) > 0){
                    //Если есть более сильное право, то команда перезаписывается им
                    modifyRight = serviceRender.canWriteAnyTime(
                            isSuperUser(),
                            UserRightsSet.WRITE_ANALYSE_ANY_TIME,
                            findEntity(Collaborator.class, getCollaboratorId()));
                }
                if (isSuperUser() && modifyRight <= 0) {
                    //Если суперюзер, и прав нету или запрет то всеравно разрешаем по самому сильному праву
                    modifyRight = UserRightsSet.WRITE_MEDICAL_DATA_ANY_TIME.id;
                }

                r[COMMAND_MODIFY] = modifyRight;
                r[COMMAND_REMOVE] = modifyRight;
            }
        }
        rights = new BeanRights(r);
    }
   
    /**
     * Обновляет данные сущности.
     * @param details новые детали сущности
     * @throws ClipsServerException
     * @return идентификатор сущности
     * @security
     * Установка прав для мед. данных Рецептов, рекоммендаций, направлений, противопоказаний,
     * диагнозов и осмотров. Читать можно только по READ_MEDICAL_DATA.
     * Изменять и удалять по WRITE_MEDICAL_DATA_DURING_DAY и WRITE_MEDICAL_DATA_ANY_TIME.
     * Для осмотров ещё два, менее мощных права WRITE_ANALYSE_DURING_DAY и WRITE_ANALYSE_ANY_TIME.
     * XXX_DURING_DAY - позволяет писать данные, если услуга не выполнена или выполнена в течении
     * текущего дня, изменять данные может только сотрудник, создавший запись.
     * XXX_ANY_TIME - позволяет редактировать любую запись, без ограничений.
     */
    @Override
    protected void onUpdate(Checkup entity, EntityDetails details,
            AuditDoc auditDoc, List<AuditDoc> auditDocList) throws ClipsServerException {
        serviceRender = findEntity(ServiceRender.class, ((HasServiceRenderID)details).getServiceRenderID());
        initBeanRights();
        if (entity.getId() == 0) {
            checkCommandAccessibility(COMMAND_CREATE);
        } else {
            checkCommandAccessibility(COMMAND_MODIFY);
        }
        CheckupDetails d = (CheckupDetails) details;
        ServiceRender sr = findEntity(ServiceRender.class, d.serviceRenderID);
        CheckupShedule cs = entity.getCheckupShedule();
           
        /*if(entity.getId() == 0) {
            //never use client date +
            Дата - дата взятия проб - берется с клиента
            entity.setDate(new Date());
        }*/
       
        //удаление чекапа из шедули и постановка на удаление шедули если она осталась пустой
        if (cs != null
                && sr.isRendered()){                       
            shedule = cs;
            entity.setCheckupShedule(null);
        }
        entity.setServiceRender(sr);
        entity.setCheckupType(findEntity(CheckupType.class, d.typeID));
        entity.setXml(d.xml);
        //Дата - дата взятия проб!
        entity.setDate(d.date);
        auditDoc.addFieldFormat("xml", entity.getCheckupType().getMetadata());
    }

    @Override
    protected int saveEntity(GenericEntity entity) {
        int id = super.saveEntity(entity);
        if (shedule != null){//удаление пустой шедули
            if (findEntityList(Checkup.class, "checkupShedule", shedule).isEmpty()){
                manager.remove(manager.merge(shedule));
                shedule = null;
            }
        }
        return id;
    }

    @Override
    protected void onRemove(Checkup entity, List<AuditDoc> auditList) throws ClipsServerException {
        serviceRender = ((HasSerren)entity).getServiceRender();//Checkup has serren
        if (serviceRender != null && serviceRender.isRendered()){
            throwNeedAdminSecurityException("У вас недостаточно прав для удаления проведённого анализа");
        }
        initBeanRights();
        checkCommandAccessibility(COMMAND_REMOVE);
        Field f[] = { new Field("checkup", entity) };
        deleteEntityList2(CheckupDicom.class, f, auditList);
        for (AuditDoc auditDoc : auditList) {
            auditDoc.addFieldFormat(entity, "xml", entity.getCheckupType().getMetadata());
        }
    }

  @Override
  public List<CheckupDicomDetails> getDicomObjects() throws ClipsServerException {
        checkCommandAccessibility(COMMAND_READ);
        Checkup entity = getExistentEntity();
       
        List data = findEntityList(CheckupDicom.class, "checkup", entity);
    List<CheckupDicomDetails> target = new ArrayList<CheckupDicomDetails>(data.size());
        for (Object object : data) {
      target.add(((CheckupDicom)object).getDetails((RightChecker) this));
    }
   
        return target;
  }

    /**
     * Сохраняет результаты анализа и делает услугу оказанной.
     * !Внимание: после вызова этого метода связанный с чекапом делегат
     *      SerrenLocal теряет актуальность, его надо обновить с базы
   * @throws ClipsServerException
     */
    @Override
    public ModificationInfo renderAnalyse() throws ClipsServerException {
        ArrayList<AuditDetails> target = new ArrayList<AuditDetails>(2);
        Checkup entity = getExistentEntity();
        checkCommandAccessibility(isJustCreated() ? COMMAND_CREATE : COMMAND_MODIFY);
        serviceRender = entity.getServiceRender();
        if (!serviceRender.isRendered()) {
            AuditDoc<ServiceRender> auditSerren = new AuditDoc<ServiceRender>(serviceRender, getCollaborator());
            serviceRender.setRenderedDate(new Date());
            List<CollaboratorFunctions> list = findEntityList(CollaboratorFunctions.class, new Field[]{new Field("collaborator.id", getCollaboratorId())});
            if (list.size() < 1){
                throwNeedAdminSecurityException("Текущий сотрудник не может оказывать услуги");
            }
            serviceRender.setFunctions(list.get(0));
            saveEntity(serviceRender);
            auditSerren.check(serviceRender);
            target.add(persistAudit(auditSerren));
        }
        AuditDoc<Checkup> auditCheckup = new AuditDoc<Checkup>(entity, getCollaborator());
        entity.setCheckupShedule(null);
        saveEntity(entity);
        auditCheckup.check(entity);
        target.add(persistAudit(auditCheckup));
        return new ModificationInfo(entity.getId(), target);
    }

   
}
TOP

Related Classes of beans.doctor.checkup.CheckupBean

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.