Package clips.delegate.doctor.checkup

Source Code of clips.delegate.doctor.checkup.CheckupLocal

/*
* CheckUpLocal.java
*
* Created on 23 Декабрь 2007 г., 19:58
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package clips.delegate.doctor.checkup;

import beans.doctor.checkup.CheckupBean;
import beans.doctor.checkup.CheckupBeanRemote;
import cli_fmw.delegate.cache.ExtraDataManager;
import clips.delegate.client.ClientLocal;
import clips.delegate.service.SerRenLocal;
import clips.delegate.directory.filtered.DirectoryCheckupType;
import clips.delegate.directory.filtered.DirectoryCheckupTypeItem;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import clips.delegate.doctor.HasSerrenLocal;
import clips.delegate.doctor.Iconable;
import clips.delegate.DEC.DECServiceRender;
import cli_fmw.delegate.cache.DelegateSecondaryCache;
import cli_fmw.report.SegmentedTableReporter;
import beans.doctor.checkup.dicom.CheckupDicomDetails;
import framework.beans.ModificationInfo;
import framework.utils.Converter;
import cli_fmw.main.ClipsException;
import cli_fmw.main.DelegatePrintable;
import cli_fmw.report.AlignmentType;
import cli_fmw.report.CombinedReportCreator;
import cli_fmw.report.ExtraField;
import cli_fmw.report.TableReportOptions;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import clips.delegate.doctor.Signable;
import beans.doctor.checkup.CheckupDetails;
import cli_fmw.delegate.AuditListener;
import clips.doctor.newEMC.init.generic.ChildrenListStateless;
import clips.doctor.newEMC.init.generic.DelegateNode;
import framework.utils.ROList;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;

/**
* Делегат, представляющий доступ к 1 записи в таблице checkup -
* осмотр, включая анализы
* @author Администратор
*/
public class CheckupLocal extends DelegateNode<CheckupBeanRemote, CheckupDetails, CheckupDICOMLocal>
        implements Iconable, DelegatePrintable, HasSerrenLocal, Signable {

    private DECServiceRender serviceRender = new DECServiceRender(this, "информацию об услуге, в рамках которой проведён осмотр/анализ", getAuditListener());
    private DelegateSecondaryCache<CheckupXMLData> cacheCheckupXMLData
            = new DelegateSecondaryCache<CheckupXMLData>(getSCM(), "список проб") {

        @Override
        protected CheckupXMLData init() throws Exception {
            return new CheckupXMLData(getType(), getDetails().xml, isNewlyCreated());
        }

        @Override
        protected CheckupXMLData initNew() throws ClipsException {
            try {
                return new CheckupXMLData(getType(), getDetails().xml, isNewlyCreated());
            } catch (JDOMException ex) {
                throw new ClipsException("Не удалось создать осмотр либо анализ: ", ex);
            }
        }

        @Override
        protected void setPrimary(CheckupXMLData type) throws ClipsException {
            getDetails().xml = type.getXMLStr();
        }
    };
    private static ImageIcon icon = null;
 
  private DICOMList dicomObjects
            = new DICOMList(getEDM());

    class DICOMList extends ChildrenListStateless<CheckupDICOMLocal, CheckupDicomDetails>{

        public DICOMList(ExtraDataManager contaner) {
            super(contaner);
        }

        @Override
        protected CheckupDICOMLocal createDelegate(CheckupDicomDetails d) throws Exception {
            return new CheckupDICOMLocal(d, CheckupLocal.this, getAuditListener());
        }

        @Override
        protected List<CheckupDicomDetails> initDetails() throws Exception {
            return getBean().getDicomObjects();
        }

    }

    /**
     * Создание нового чекапа для существующей в базе услуги
     * @param serRen
     * @throws ClipsException
     */
    public CheckupLocal(SerRenLocal serRen) throws ClipsException {
        super(serRen.getAuditListener());
        Document xmlDoc = new Document(new Element("analysys"));
        getDetails().xml = Converter.xmlToString(xmlDoc);
        serviceRender.initBy(serRen);
    }

    public CheckupLocal(CheckupDetails details, SerRenLocal serRen, AuditListener al) throws ClipsException {
        super(details, al);
        serviceRender.initBy(serRen);
    }

    @Override
    protected CheckupDetails getNewDetails() {
        return new CheckupDetails();
    }
   
    /**
     * Когда заканчивается срок годности пробы. Возвращаемое значение может быть null
     * @return
     * @throws ClipsException
     */
    public Date getWorkingLifeDate() throws ClipsException {
        CheckupXMLData xml = getCheckupXMLData();
        String s = xml.getWorkingLife();
        if (!s.equals("") && this.getDate() != null) {
            try {
                int days = Integer.parseInt(s);
                GregorianCalendar gc = new GregorianCalendar();
                gc.setTime(this.getDate());
                gc.add(GregorianCalendar.DAY_OF_YEAR, days);
                return gc.getTime();
            } catch (NumberFormatException ex) {
                throw  new ClipsException("Значение ["+s+"] не является целым числом",ex);
            }
        } else {
            return null;
        }
    }
   
    @Override
    public SerRenLocal getSerrenLocal() throws ClipsException {
        return serviceRender.get();
    }

    public DirectoryCheckupTypeItem getType() throws ClipsException {
        DirectoryCheckupType checkUpTypes = DirectoryLocator.getDirectory(DirectoryCheckupType.class, false);
        return checkUpTypes.getItemFromID(getDetails().typeID);
    }

    public void setType(DirectoryCheckupTypeItem item) throws ClipsException {
        if (getDetails().typeID != 0) {
            throw new ClipsException("Запрещено менять тип чекапа");
        }
        getDetails().typeID = item.getID();
        cacheCheckupXMLData.clearCache();
        fireContentStateEvent();
    }
   
    /**
     * Дата взятия проб
     * @return
     * @throws cli_fmw.delegate.exception.ClipsException
     */
    public Date getDate() throws ClipsException {
        return getDetails().date;
    }
   
    public void setDate(Date date) throws ClipsException {
        getDetails().date = date;
        fireContentStateEvent();
    }
   
    /**
     * выдает хмльные данные
     * @return
     */
    public CheckupXMLData getCheckupXMLData() throws ClipsException {
        return cacheCheckupXMLData.get();
    }

    /**
     * принимает хмльные данные
     * @return
     */
    public void setCheckupXMLData(CheckupXMLData checkupXMLData) throws ClipsException {
        cacheCheckupXMLData.set(checkupXMLData);
        cacheCheckupXMLData.clearCache();
    }

    /**
     * Делает услугу оказанной.
     * !Внимание:
     * - после вызова этого метода связанный с чекапом делегат
     *      SerrenLocal теряет актуальность, его надо обновить с базы
     * - Результаты анализа НЕ СОХРАНЯЮТСЯ, это надо сделать заранее
     * @return
     * @throws generic.ClipsServerException
     */
    public void renderAnalyse() throws ClipsException {
        try {
            ModificationInfo mi = getBean().renderAnalyse();
            auditDetailsList.addAll(mi.getAudit());
            fireAuditEvent();
        } catch (Exception ex) {
            clearBean();
            throw new ClipsException("Не удалось сохранить анализ", ex);
        }
        fireContentStateEvent();
    }
  
   
   
    /**
     * печать...
     * @return
     * @throws cli_fmw.delegate.exception.ClipsException
     */
    @Override
    public void print(CombinedReportCreator cCreator) throws ClipsException {
        SerRenLocal serRen = getSerrenLocal();
        boolean rendered = serRen.isRendered();

        CheckupXMLData data = getCheckupXMLData();
        boolean isAnalysys = data.getCheckupType().isAnalyse();

        SegmentedTableReporter analyseReporter = cCreator.createAnalyseReporter(getClass());

        //название анализа
        String title;
        if (isAnalysys) {
            title = "Анализ: ";
        }
        else {
            title = "Осмотр: ";
        }
        analyseReporter.setTitle(title + data.getCheckupType().getTitle());

        //Фиелды до таблицы
        String fieldName;
        String fieldValue;
        ExtraField extraField;
       
        ClientLocal client = serRen.getPolisData().getClient(getAuditListener());
        fieldName = "Пациент: ";
        fieldValue = client.toString();
        if (isAnalysys) {
            fieldValue += " (" + Converter.dateToString(client.getBorn()) + ")";
        }
        extraField = new ExtraField(fieldValue, fieldName, AlignmentType.left);
        analyseReporter.addField(extraField, false);
               
        if (isAnalysys) {
            fieldName = "Направил: ";
            fieldValue = serRen.getSerRenDirector().toString();
            fieldValue += " (" + Converter.dateToString(serRen.getSerDate()) + ")";
            extraField = new ExtraField(fieldValue, fieldName, AlignmentType.left);
            analyseReporter.addField(extraField, false);

            if (rendered) {
                fieldName = "Дата забора биоматериала: ";
                fieldValue = Converter.dateToString(getDate());
                extraField = new ExtraField(fieldValue, fieldName, AlignmentType.left);
                analyseReporter.addField(extraField, false);
            }
        }
        else {           
            ArrayList<FieldForXML> preField = data.getPreFieldList();
           
            for(int i = 0; i < preField.size(); i++) {
                fieldName = preField.get(i).title + ": ";
                fieldValue = data.getField(preField.get(i).id);
                if (fieldValue == null) {
                    fieldValue = "";
                }
                extraField = new ExtraField(fieldValue, fieldName, AlignmentType.dataInOneColoumnByLeft);
                analyseReporter.addField(extraField, false);
            }
        }
       
        ArrayList<String> probeList = data.getProbeList();
        if (!probeList.isEmpty()) {
            //добавляем заголовок таблицы
            List<String> header = new ArrayList<String>();
            header.add("Методика");
            ArrayList<String> valueList = data.getProbeValueList();
            for (int i = 0; i < valueList.size(); i++) {
                String titleStr = data.getProbeValueTitle(valueList.get(i));
                header.add(titleStr);
            }
            header.add("Описание");
            analyseReporter.setHeader(header);

            //добавляем строки таблицы
            List<String> row;
            for (int i = 0; i < probeList.size(); i++) {
                row = new ArrayList<String>();
                if (probeList.get(i).startsWith("separator")) {
                    String separator = data.getProbeTitle(probeList.get(i)).replace("separator ", "");
                    analyseReporter.addSeparator(separator);
                }
                else {
                    row.add(data.getProbeTitle(probeList.get(i)));
                    for (int j = 0; j < valueList.size(); j++) {
                        Object value = data.getProbeValue(probeList.get(i), valueList.get(j));
                        String metric = data.getProbeValueMetric(probeList.get(i), valueList.get(j));
                        String valueMetric = ( value == null ? "" : value.toString() + " " + (metric == null ? "" : metric));
                        row.add(valueMetric);                       
                    }
                    String description = data.getProbeDescription(probeList.get(i));
                    row.add(description);
                    analyseReporter.addRow(row);
                }
            }
        }
        //Фиелды после таблицы
        if (isAnalysys) {
            if (rendered) {
                fieldName = "Анализ провел(дата исследования): ";
                fieldValue = serRen.getCollaboratorFunctions() == null
                        ? "" : serRen.getCollaboratorFunctions().getCollaborator().toString();
                fieldValue += serRen.getSerRenderDate() == null
                        ? "" : " (" + Converter.dateToString(serRen.getSerRenderDate()) + ")";
            }
            else {
                fieldName = "Рекомендации: ";
                fieldValue = serRen.getService().getDescription();
            }
            extraField = new ExtraField(fieldValue, fieldName, AlignmentType.dataInOneColoumnByLeft);
            analyseReporter.addField(extraField, true);
        }
        else {
            ArrayList<FieldForXML> postField = data.getPostFieldList();
            for(int i = 0; i < postField.size(); i++) {
                fieldName = postField.get(i).title + ": ";
                fieldValue = data.getField(postField.get(i).id);
                if (fieldValue == null) {
                    fieldValue = "";
                }
                extraField = new ExtraField(fieldValue, fieldName, AlignmentType.dataInOneColoumnByLeft);
                analyseReporter.addField(extraField, true);
            }
            DirectoryCollaboratorItem collab = serRen.getSerRenDirector();
            fieldName = "Врач: ";
            fieldValue = collab.getTitle();
            extraField = new ExtraField(fieldValue, fieldName, AlignmentType.left);
            analyseReporter.addField(extraField, true);
        }
        TableReportOptions ops = new TableReportOptions();
        ops.topMargin = 0;
        ops.bottomMargin = 0;
        analyseReporter.setPageOptions(ops);
        analyseReporter.finish();
    }

    @Override
    public String toString() {
        try {
            DirectoryCheckupTypeItem type = getType();
            if (type.isAnalyse()) {
                return "Анализ";
            } else {
                return "Осмотр";
            }
        } catch (ClipsException ex) {
            //ничо не делать
            return ("Осмотр/анализ");
        }
    }

    @Override
    public Icon getIcon() {
        return icon;
    }

    @Override
    protected String getBeanName() {
        return CheckupBean.class.getSimpleName();
    }

    @Override
    public void restore() {
        super.restore();
        cacheCheckupXMLData.clearCache();
    }

    @Override
    public boolean isSignCorrect() throws ClipsException{
        //STUB
        return (getID() != -1 );
        //END STUB
    }

    @Override
    public String getSignMessage() throws ClipsException {
        if (getID() == 0) {
            return "Подпись отсутствует";
        }
        //STUB
        String coll;
        if (getSerrenLocal().getCollaboratorFunctions() != null) {
            coll = getSerrenLocal().getCollaboratorFunctions().getTitle();
        } else {
            coll = getSerrenLocal().getSerRenDirector().getTitle();
        }

        String s = "Подписано " + Converter.dateToString(getDate())
                + " - " + coll;
        if (isSignCorrect() ) {
            return s;
        } else {
            return "Подпись не соответствует данным!";
        }
        //END STUB
    }

    @Override
    protected void addChildImpl(CheckupDICOMLocal child) throws ClipsException {
        dicomObjects.get().add(child);
    }

    @Override
    protected void removeChildImpl(CheckupDICOMLocal child) throws ClipsException {
        dicomObjects.get().remove(child);
    }

    @Override
    public ROList<CheckupDICOMLocal> getChildren() throws ClipsException {
        ROList<CheckupDICOMLocal> rOList = new ROList<CheckupDICOMLocal>(dicomObjects.get());
        return rOList;
    }

    @Override
    public int getChildCount() throws ClipsException {
        int size = dicomObjects.getSize();
        return size;
    }


}
TOP

Related Classes of clips.delegate.doctor.checkup.CheckupLocal

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.