« 受付番号表示 | トップページ | スタンプ箱のルートノード »

2008年5月 1日 (木)

状態アイコン背景色

Status 状態アイコンの背景色を,病名がないとき黄色にする(病名つけ忘れを防ぐため)。また,今日つけた病名しか付いていない場合(全くの初診の場合)は,背景色を白にする。以下の4クラスの編集が必要。

client/ByomeiCount.java

  1. 新たにクラス作成
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package open.dolphin.client;
    
    import java.util.GregorianCalendar;
    import open.dolphin.delegater.DocumentDelegater;
    import open.dolphin.dto.DiagnosisSearchSpec;
    import open.dolphin.infomodel.PatientVisitModel;
    
    /**
     *
     * @author Motomachi Usagi
     */
    public class ByomeiCount {
        private PatientVisitModel pvt;
        private int byomeiCount;
        private int byomeiCountToday;
        private DocumentDelegater ddl;
        private DiagnosisSearchSpec spec;
        
        public ByomeiCount(PatientVisitModel p) {
            pvt = p;
            byomeiCount = 0;
            byomeiCountToday = 0;
            ddl = null;
            spec = null;
        }
    
        public void setByomeiCount() {
            // PatientVisitModel に病名数をセットする 
            GregorianCalendar today = new GregorianCalendar();
            ddl = new DocumentDelegater();
            Long karteId = ddl.getKarte(pvt.getPatient().getId(), today.getTime()).getId();
            spec = new DiagnosisSearchSpec();
            spec.setCode(DiagnosisSearchSpec.PATIENT_SEARCH);
            spec.setKarteId(karteId);
            byomeiCount = ddl.getDiagnosisList(spec).size(); // 今までについている病名の総数
            
            if (byomeiCount != 0) {
                today.add(GregorianCalendar.DATE, -1);
                spec.setFromDate(today.getTime());
                byomeiCountToday = ddl.getDiagnosisList(spec).size(); // 今日ついた病名の総数
            }
            
            pvt.setByomeiCount(byomeiCount);
            pvt.setByomeiCountToday(byomeiCountToday);
        }
    }
    

infomodel/PatientVisitModel.java

  1. メソッドを4つ加える
    ////↓ pvt model の項目を増やす
    private int byomei;  // 今まで付いた病名の総数
    private int byomeiToday; // 今日付いた病名の数
    ////↑
    
    /**
     * PatientVisitModelオブジェクトを生成する。
     */
    public PatientVisitModel() {
    }
    
    ////↓
    // 病名の総数
    public void setByomeiCount(int bc) {
        byomei = bc;
    }
    // 今日付いた病名の数
    public void setByomeiCountToday(int bct) {
        byomeiToday = bct;
    }
    // 初診かどうか(今日付いた病名がすべての病名かどうか)
    public boolean isShoshin() {
        return (byomei == byomeiToday);
    }
    // 病名がついているかどうか
    public boolean hasByomei() {
        return (byomei != 0);
    }
    ////↑
    

client/DiagnosisDocument.java

  1. 病名を保存するところで,pvt にも保存する
    /**
     * DiagnosisPutTask
     */
    class DiagnosisPutTask extends DBTask> {
    ・
    ・
    // 保存する
    if (added != null && added.size() > 0) {
        logger.debug("ddl.putDiagnosis");
        result = ddl.putDiagnosis(added);
        if (ddl.isNoError()) {
            logger.debug("ddl.putDiagnosis() is NoErr");
            for (int i = 0; i < added.size(); i++) {
                long pk = result.get(i).longValue();
                logger.debug("persist id = " + pk);
                RegisteredDiagnosisModel rd = (RegisteredDiagnosisModel) added.get(i);
                rd.setId(pk);
            }
        }
    }
    
    ////↓   PatientVisitModel に病名数をセットする 
    ByomeiCount bc = new ByomeiCount(getContext().getPatientVisit());
    bc.setByomeiCount();
    ////↑
    

plugins/WatingList/WatingListImpl.java

  1. 受付番号表示の追加部分の下に,病名数の処理を追加する
    // 結果を追加する
    if (newVisitCount > 0) {
        for (int i = 0; i < newVisitCount; i++) {
    ////↓受付番号表示
            PatientVisitModel pvt = (PatientVisitModel) result.get(i);
            pvt.setNumber(firstResult+i+1);
    
            // 病名が1つでもあるかどうか,初診かどうかのセット,
            ByomeiCount bc = new ByomeiCount(pvt);
            bc.setByomeiCount();
    ////↑
    
    //
    // cnt 以降は新しいレコードなのでそのまま追加する
    //
    for (int i = index; i < result.size(); i++) {
    
    ////↓受付番号表示
        PatientVisitModel pvt = (PatientVisitModel) result.get(i);
        pvt.setNumber(firstResult+i+1);
        dataList.add(result.get(i));
    //  dataList.add(result.get(index++));
    
        // 病名が1つでもあるかどうか,初診かどうかを pvt にセット
        ByomeiCount bc = new ByomeiCount(pvt);
        bc.setByomeiCount();
    ////↑
    
  2. レンダラのところでバックグランドを設定する
    /**
     * KarteStateRenderer
     * カルテ(チャート)の状態をレンダリングするクラス。
     */
    protected class KarteStateRenderer extends DefaultTableCellRenderer {
    ・
    ・
        Color fore = pvt != null && pvt.getState() == ChartImpl.CANCEL_PVT ? CANCEL_PVT_COLOR : table.getForeground();
        this.setForeground(fore);
    }
    
    ////↓病名がついていなければ黄色,初診(本日ついた病名しかついていない)なら白
    if (pvt != null) {
        if (!pvt.hasByomei()) this.setBackground(Color.YELLOW);
        else if (pvt.isShoshin()) this.setBackground(Color.WHITE);
    }
    ////↑
    

« 受付番号表示 | トップページ | スタンプ箱のルートノード »

OpenDolphin」カテゴリの記事