Package beans.doctor.prescription

Source Code of beans.doctor.prescription.PrescriptionBean

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

package beans.doctor.prescription;

import framework.beans.EntityDetails;
import beans.doctor.MedicalDataBean;
import beans.directory.simple.entities.TakeDrug;
import beans.directory.vidal.entities.Vidal;
import beans.service.ServiceRender;
import framework.audit.AuditDoc;
import framework.beans.ModificationInfo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import framework.generic.ClipsServerException;
import framework.generic.ESecurity;
import java.util.Date;
import javax.ejb.EJBException;
import javax.ejb.Stateful;
import framework.security.RightChecker;
import framework.utils.DateTimeUtils;

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

    public PrescriptionBean() {
        super(Prescription.class);
    }

    /**
     * Обновляет данные сущности.
     * @param details новые детали сущности
     * @throws EJBException в случае если обновление отвергнуто системой
     *          безопастности либо произошла ошибка
     * @return идентификатор сущности
     * Безопасность.
     * Установка прав для мед. данных Рецептов, рекоммендаций, направлений, противопоказаний,
     * диагнозов и осмотров. Читать можно только по 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(Prescription entity, EntityDetails details,
            AuditDoc auditDoc, List<AuditDoc> auditDocList)
            throws ClipsServerException {
        super.onUpdate(entity, details, auditDoc, auditDocList);
        PrescriptionDetails d = (PrescriptionDetails) details;

        if(entity.getId() != 0) {
            if(entity.getServiceRender().getId() != d.serviceRenderID) {
                throw new ESecurity("Cмена услуги недопустима");
            }
        }
        if (!DateTimeUtils.belongsToCurrentDay(d.date)) {
            throwNeedAdminSecurityException("Попытка подмены даты");
        }
        entity.setDate(d.date);
        entity.setServiceRender(findEntity(ServiceRender.class, d.serviceRenderID));
    }

    /**
     * Удаляет сущность из базы данных
     */
    @Override
    protected void onRemove(Prescription entity, List<AuditDoc> auditDocList) throws ClipsServerException {
        super.onRemove(entity, auditDocList);
        deleteEntityList2(PrescriptionItem.class, new Field [] { new Field("prescription", entity) },
                auditDocList);
    }
        
   /**
     * Возвращает список содержимого назначения
     * @return список деталей - элементов назначения
     */
    @Override
    public List<PrescriptionItemDetails> getPrescriptionsList() throws ClipsServerException {
        checkCommandAccessibility(COMMAND_READ);
        Prescription entity = getExistentEntity();
       
        Collection<PrescriptionItem> list = findEntityList(PrescriptionItem.class, "prescription", entity);
        List<PrescriptionItemDetails> res = new ArrayList<PrescriptionItemDetails>();
        Iterator<PrescriptionItem> i = list.iterator();
        while(i.hasNext()) {
            PrescriptionItem j = i.next();
            res.add(j.getDetails((RightChecker) this));
        }
        return res;       
    }           
   
     /**
     * Добавляет или обновляет элемент назначения. Если details.id = 0 сущность создается,
     * иначе обновляется существующая с заданным идентификатором.
     * @param details данные
     * @return идентификатор сущности
     * @throws EJBException в случае если обновление отвергнуто системой
     *          безопастности либо произошла ошибка     *
     */
    @Override
    public ModificationInfo setPrescriptionItem(PrescriptionItemDetails details) throws ClipsServerException {
        checkCommandAccessibility(COMMAND_MODIFY);
        Prescription entity = getExistentEntity();
       
        PrescriptionItem prescriptionItem = null;
        AuditDoc<PrescriptionItem> auditDoc;
        if(details.id != 0) {
            prescriptionItem = findEntity(PrescriptionItem.class, details.id);
            checkTheSame(prescriptionItem.getPrescription());
            auditDoc = new AuditDoc<PrescriptionItem>(prescriptionItem, getCollaborator());
        } else {
            auditDoc = new AuditDoc<PrescriptionItem>(null, getCollaborator());
            prescriptionItem = new PrescriptionItem();
            prescriptionItem.setPrescription(entity);
        }          
        prescriptionItem.setVidal(findEntity(Vidal.class, details.vidalID));
        prescriptionItem.setTakeDrug(findEntity(TakeDrug.class, details.takeDrugID));
        prescriptionItem.setDescription(details.description);
        int id = saveEntity(prescriptionItem);
        auditDoc.check(prescriptionItem);
        return new ModificationInfo(id, persistAudit(auditDoc));
    }
   
    /**
     * Удаляет элемент из назначения.
     * @param id идентификатор элемента
     * @throws EJBException в случае если обновление отвергнуто системой
     *          безопастности либо произошла ошибка     *
     */
    @Override
    public ModificationInfo removePrescriptionItem(int id) throws ClipsServerException {
        checkCommandAccessibility(COMMAND_REMOVE);
        checkEntityExist();
        PrescriptionItem prescriptionItem = findEntity(PrescriptionItem.class, id);
        checkTheSame(prescriptionItem.getPrescription());
        AuditDoc<PrescriptionItem> auditDoc = new AuditDoc<PrescriptionItem>(prescriptionItem, getCollaborator());
        manager.remove(prescriptionItem);
        auditDoc.check(null);
        return new ModificationInfo(persistAudit(auditDoc));
    }
}
TOP

Related Classes of beans.doctor.prescription.PrescriptionBean

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.