Package clips.delegate.doctor.sicklist

Source Code of clips.delegate.doctor.sicklist.SicklistLocal$DECDiagnosis

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

import beans.doctor.sicklist.SicklistBean;
import beans.doctor.sicklist.SicklistBeanRemote;
import cli_fmw.delegate.cache.ExtraDataManager;
import cli_fmw.delegate.cache.SecondaryCacheManager;
import cli_fmw.delegate.client.Address;
import beans.doctor.sicklist.entity.SicklistDetails;
import cli_fmw.delegate.directory.DirectoryItemRO;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import clips.delegate.DEC.DECSicklist;
import cli_fmw.delegate.cache.DelegateExtraDataRO;
import cli_fmw.delegate.cache.DelegateSecondaryCacheDgt;
import cli_fmw.delegate.utils.TimeLocal;
import cli_fmw.main.ClipsException;
import cli_fmw.main.DelegatePrintable;
import cli_fmw.report.CombinedReportCreator;
import cli_fmw.report.CombinedReportOptions;
import cli_fmw.report.FormReportCreator;
import cli_fmw.report.PageOptions.PageOrentation;
import cli_fmw.report.ReporterFactory;
import clips.delegate.client.ClientLocal;
import clips.delegate.directory.complex.DirectoryEnterprise;
import clips.delegate.directory.complex.DirectoryEnterpriseItem;
import clips.delegate.directory.ro.DirectoryCollaborator;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import clips.delegate.directory.simple.disablilityType.DirectoryDisabilityType;
import clips.delegate.directory.simple.disablilityType.DirectoryDisabilityTypeItem;
import clips.delegate.doctor.diagnosis.DiagnosisLocal;
import clips.delegate.service.SerRenLocal;
import clips.doctor.newEMC.init.generic.DelegateNodeLeaf;
import clips.login.UserInfo;
import clips.main.ClipsConfig;
import beans.doctor.sicklist.entity.SickLongDetails;
import cli_fmw.delegate.AuditListener;
import framework.utils.Converter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import framework.utils.DateTimeUtils;
import java.util.Date;
import java.util.HashMap;

/**
*
* @author axe
*/
public class SicklistLocal extends DelegateNodeLeaf<SicklistBeanRemote, SicklistDetails>
        implements DelegatePrintable {

    public static final int CONTINUED1 = 1;
    public static final int CONTINUED2 = 2;
    public static final int CONTINUED3 = 3;

    DECSicklist            prevSicklist = new DECSicklist(this, "больничный", getAuditListener());
    DirectoryCollaborator      directoryCollaborator;
  DECDiagnosis          diagnosisOpen = new DECDiagnosis(getSCM(), SicklistBeanRemote.DiagType.open);
  DECDiagnosis          diagnosisClose = new DECDiagnosis(getSCM(), SicklistBeanRemote.DiagType.close);
  //DECServiceRender serrenClosed = new DECServiceRender(this);

    SerrenCacheList serrenCache = new SerrenCacheList(getEDM());
  DelegateExtraDataRO<ClientLocal>clientCache = new DelegateExtraDataRO<ClientLocal>(getEDM()) {
    @Override
    protected ClientLocal init() throws Exception {
      return getDiagnosisOpen().getSerrenLocal().getDiseaseLocal().getEmcLocal().getClient();
    }

        @Override
        protected ClientLocal initNew() {
            return null;
        }
  };
       
    public SicklistLocal(int id, ClientLocal cl, AuditListener al) throws ClipsException {
        super(id, al);
    if (cl == null) {
      throw new IllegalArgumentException("cl can't be null");
    }
    clientCache.initBy(cl);
    }

    public SicklistLocal(SicklistDetails details, AuditListener al) throws ClipsException {
        super(details, al);
    }

    public SicklistLocal(SicklistDetails details, ClientLocal cl, AuditListener al) throws ClipsException {
        super(details, al);
     if (cl == null) {
      throw new IllegalArgumentException("cl can't be null");
    }
    clientCache.initBy(cl);
   }

    public SicklistLocal(ClientLocal cl) throws ClipsException {
        super(cl.getAuditListener());
    if (cl == null) {
      throw new IllegalArgumentException("cl can't be null");
    }
    clientCache.initBy(cl);
    }

    @Override
    protected SicklistDetails getNewDetails() {
        SicklistDetails sicklistDetails = new SicklistDetails();
        sicklistDetails.sickLongList = new ArrayList<SickLongDetails>();
        return sicklistDetails;
    }
   
    @Override
    public String toString() {
        return "Больничный";
    }

    public String dataToString() throws ClipsException {
        String a = Converter.dateToString(getDateOpen().getTime()) + "-";
        if (getDateToWork() != null) {
            a += Converter.dateToString(getDateToWork().getTime());
        }
        else {
            a += "...";
        }
        a += "(" + getDiagnosisOpen().getMkb().getDiseaseCode() + ")";
        return a;
    }

    public DirectoryDisabilityTypeItem getDisability() throws ClipsException {
        DirectoryDisabilityType directoryDisab = DirectoryLocator.getDirectory(DirectoryDisabilityType.class);
        return directoryDisab.getItemFromID(getDetails().disabID);
    }

    public void setDisability(DirectoryDisabilityTypeItem item) throws ClipsException {
        if (item == null) {
            getDetails().disabID = 0;
        } else {
            getDetails().disabID = item.getID();
        }
        fireContentStateEvent();
    }

    /**
     * Клиент, которому выписан больничный (береца через диагноз открытия, заболевание и ЕМЦ)
     * @return
     * @throws ClipsException
     */
    public ClientLocal getClient() throws ClipsException {
    return clientCache.get();
    }

    /**
     * Серийный номер
   * @return
   * @throws ClipsException
     */
    public String getSerial() throws ClipsException {
        return getDetails().serial;
    }

    /**
   * @param serial Серийный номер.
   * @throws ClipsException
     */
    public void setSerial(String serial) throws ClipsException {
        if (serial == null || serial.equals("")) {
            getDetails().serial = null;
        } else {
            getDetails().serial = serial;
        }
        fireContentStateEvent();
    }

    public boolean isSerialNotSavedYet() throws ClipsException {
        if (getSerial().trim().length() == 0 ||
                !getSerial().equals(getDetailsOriginal().serial)) {
            return true;
        }
        return false;
    }

    /**
     * Дата открытия
   * @return unix local time
   * @throws ClipsException
     */
    public GregorianCalendar getDateOpen() throws ClipsException {
        GregorianCalendar c = new GregorianCalendar();
        c.setTime(getDetails().dateOpen);
        return c;
    }

    public void setDateOpen(Calendar c) throws ClipsException {
        getDetails().dateOpen = DateTimeUtils.getDateOnly(c.getTime());
        fireContentStateEvent();
    }
   
    /**
     * Регистратор БЛ
     * @return
     * @throws ClipsException
     */
    public DirectoryCollaboratorItem getRegistrator() throws ClipsException {
        if (directoryCollaborator == null) {
            directoryCollaborator = DirectoryLocator.getDirectory(DirectoryCollaborator.class, false);
        }
        return directoryCollaborator.getItemFromID(getDetails().registratorID);
    }

    public void setRegistrator(DirectoryCollaboratorItem coll) throws ClipsException {
        getDetails().registratorID = coll.getID();
        fireContentStateEvent();
    }


    /**
     * Возвращает индекс группы связанного списка БЛ.
     * Численно он равен идентифкатору первого БЛ в списке, однако это детали реализации
     * и на это не стоит рассчитывать.
     * @return
     * @throws cli_fmw.main.ClipsException
     */
    public int getGroupIndex() throws ClipsException {
        return getDetails().headID;
    }

    /**
     * Альтернативный автор, заданный текстом
     * @return
     * @throws ClipsException
     */
    public String getAltOpener() throws ClipsException {
        return getDetails().altOpener;
    }

    /**
     * Альтернативный автор, заданный текстом
   * @param collaboratorAlt
   * @throws ClipsException
     */
    public void setAltOpener(String collaboratorAlt) throws ClipsException {
        if (collaboratorAlt == null || collaboratorAlt.equals("")) {
            getDetails().altOpener = null;
        } else {
            getDetails().altOpener = collaboratorAlt;
        }
        fireContentStateEvent();
    }

    /**
     * закрыт или нет БЛ
   * @return
   * @throws ClipsException
     */
    public boolean isClosed() throws ClipsException {
        return getDetails().closerID != 0 && getDetails().dateToWork != null;
    }

    /**
     * Кто закрыл
     * @return
     * @throws ClipsException
     */
    public DirectoryCollaboratorItem getCloser() throws ClipsException {
        if (directoryCollaborator == null) {
            directoryCollaborator = DirectoryLocator.getDirectory(DirectoryCollaborator.class, false);
        }
        return directoryCollaborator.getItemFromID(getDetails().closerID);
    }

    public void setCloser(DirectoryCollaboratorItem closer) throws ClipsException {
        getDetails().closerID = closer.getID();
        fireContentStateEvent();
    }
    /**
     * Название предприятия, выдавшее больничный
   * @return
   * @throws ClipsException
     */
    public String getLpuName() throws ClipsException {
    if (getDetails().openerID == 0){
      return getDetails().altLpu;
    }
    else{
      return getOpener().getLpu().toString();
    }
    }

     public String getAltLpu() throws ClipsException {
        return getDetails().altLpu;
    }
   /**
     * Предприятие, выдавшее больничный
   * @param altLpu
   * @throws ClipsException
     */
    public void setAltLpu(String altLpu) throws ClipsException {
        getDetails().altLpu = altLpu;
        fireContentStateEvent();
    }

    /**
     * * Куда направлен
   * @return
   * @throws ClipsException
     */
    public DirectoryEnterpriseItem getEnterprise() throws ClipsException {
        DirectoryEnterprise enterprise = DirectoryLocator.getDirectory(DirectoryEnterprise.class, false);
        return enterprise.getItemFromID(getDetails().entID);
    }

    /**
     * * Куда направлен
   * @param enterprise
   * @throws ClipsException
     */
    public void setEnterprise(DirectoryEnterpriseItem enterprise) throws ClipsException {
        getDetails().entID = enterprise == null ? 0 : enterprise.getID();
        fireContentStateEvent();
    }

    /**
     *
   * @return
   * @throws ClipsException
     */
    public String getOtherDirection() throws ClipsException {
        return getDetails().otherDirection;
    }

    /**
     *
   * @param otherDirection
   * @throws ClipsException
     */
    public void setOtherDirection(String otherDirection) throws ClipsException {
        if (otherDirection == null || otherDirection.equals("")) {
            getDetails().otherDirection = null;
        } else {
            getDetails().otherDirection = otherDirection;
        }
        fireContentStateEvent();
    }

    /**
     * Количество освобождений от работы
     * @return
     * @throws cli_fmw.main.ClipsException
     */
    public int getProlongationCount() throws ClipsException{
        return getDetails().sickLongList.size();
    }
   
    /**
     * Даты продления
     * @param pos - номер даты продления
     * @return
     * @throws ClipsException
     */
    public GregorianCalendar getTill(int pos) throws ClipsException {
        if (pos >= getProlongationCount()) {
            throw new IllegalArgumentException("Wrong position : " + pos);
        }
        GregorianCalendar cal = (GregorianCalendar) GregorianCalendar.getInstance();
        if (pos < getDetails().sickLongList.size()) {
            cal.setTime(getDetails().sickLongList.get(pos).date);
            return cal;
        } else {
            return null;
        }
    }
   
    /**
     * Последняя дата продления
     * @return
     * @throws ClipsException
     */
    public GregorianCalendar getTill() throws ClipsException {
        int pos = getDetails().sickLongList.size();
        if (pos == 0) {
            return getDateOpen();
        }
        pos -= 1;
        GregorianCalendar cal = (GregorianCalendar) GregorianCalendar.getInstance();
        cal.setTime(getDetails().sickLongList.get(pos).date);
        return cal;
    }

    public DirectoryCollaboratorItem getCreator() throws ClipsException {
    return getCollaborator(0, false);
  }

    public DirectoryCollaboratorItem getOpener() throws ClipsException {
        if (directoryCollaborator == null) {
            directoryCollaborator = DirectoryLocator.getDirectory(DirectoryCollaborator.class, false);
        }
        return getDetails().openerID == 0 ? null : directoryCollaborator.getItemFromID(getDetails().openerID);
    }

    /**
     * Сотрудники продляющие лист
     * @param pos - номер продления
     * @return
     * @throws ClipsException
     */
    public DirectoryCollaboratorItem getCollaborator(int pos) throws ClipsException {
        return getCollaborator(pos, true);
    }

    /**
     * Сотрудники продлявшие диагноз, с возможностью отключения проверки на корректность продления
     * @param pos
     * @param checkNumber
     * @return
     * @throws cli_fmw.main.ClipsException
     */
    private DirectoryCollaboratorItem getCollaborator(int pos, boolean checkNumber) throws ClipsException {
        if (directoryCollaborator == null) {
            directoryCollaborator = DirectoryLocator.getDirectory(DirectoryCollaborator.class, false);
        }
        if (pos >= getProlongationCount()) {
            if (checkNumber){
                throw new IllegalArgumentException("Wrong position : " + pos);
            }else{
                return directoryCollaborator.getNullItem();
            }
        }else{
            return directoryCollaborator.getItemFromID(getDetails().sickLongList.get(pos).collID);
        }
    }

    /**
     * Услуги (посещения) в которых лист был продлен
     * @param pos - номер продления
     * @return
     * @throws ClipsException
     */
    public SerRenLocal getSerRen(int pos) throws ClipsException {
        if (pos >= getProlongationCount()) {
            throw new IllegalArgumentException("Wrong position : " + pos);
        }
        return serrenCache.get().get(pos);
    }

    public void setOpener(DirectoryItemRO coll) throws ClipsException {
        getDetails().openerID = coll == null ? 0 : coll.getID();
        fireContentStateEvent();
    }

    public SicklistLocal getPreviousSicklist() throws ClipsException {
        return prevSicklist.get();
    }

    public void setPreviousSicklist(SicklistLocal sicklistLocal) throws ClipsException {
        prevSicklist.set(sicklistLocal);
        fireContentStateEvent();
    }

    /**
     * @return
     * @throws ClipsException
     */
    public String getDescription() throws ClipsException {
        return getDetails().comment;
    }

    /**
     * @param description
     * @throws ClipsException
     */
    public void setDescription(String description) throws ClipsException {
        if (description == null || description.equals("")) {
            getDetails().comment = null;
        } else {
            getDetails().comment = description;
        }
        fireContentStateEvent();
    }

    /**
     * Дата выхода на работу (не факт что совпадёт с последним продлением,
     * может быть меньше, контролируется сервером)
     * @return unix local time
     * @throws ClipsException
     */
    public Calendar getDateToWork() throws ClipsException {
        Calendar cal = GregorianCalendar.getInstance();
        if (getDetails().dateToWork != null) {
            cal.setTime(getDetails().dateToWork);
            return cal;
        } else {
            return null;
        }
    }

    /**
     *
   * @param dateToWork
   * @throws ClipsException
     */
    public void setDateToWork(Calendar dateToWork) throws ClipsException {
        getDetails().dateToWork = DateTimeUtils.getDateOnly(dateToWork.getTime());
        fireContentStateEvent();
    }
   
    public void prolongate(Calendar dateTill, SerRenLocal serRenLocal) throws ClipsException {
        SickLongDetails sld  = new SickLongDetails();
        sld.collID = UserInfo.get().getCollaborator().getID();
        sld.date = DateTimeUtils.getDateOnly(dateTill.getTime());
        sld.serrenID = serRenLocal.getID();
        getDetails().sickLongList.add(sld);
        serrenCache.clearCache();
        fireContentStateEvent();
    }
   
    @Override
    protected String getBeanName() {
        return SicklistBean.class.getSimpleName();
    }

  public DiagnosisLocal getDiagnosisClose() throws ClipsException {
    return diagnosisClose.get();
  }

  public void setDiagnosisClose(DiagnosisLocal diagnosisClose) throws ClipsException {
    this.diagnosisClose.set(diagnosisClose);
  }

  public DiagnosisLocal getDiagnosisOpen() throws ClipsException {
    return diagnosisOpen.get();
  }

  public void setDiagnosisOpen(DiagnosisLocal diagnosisOpen) throws ClipsException {
    this.diagnosisOpen.set(diagnosisOpen);
  }

    public SerRenLocal getSerrenClosed() throws ClipsException {
        return serrenClosed.get();
    }

    public void setSerrenClosed(SerRenLocal serredClosed) throws ClipsException {
        this.serrenClosed.set(serredClosed);
        fireContentStateEvent();
    }

    @Override
    public void print(CombinedReportCreator cCreator) throws ClipsException {
        FormReportCreator creater = cCreator.createFormReporter(getClass(), 2);
       
        ClientLocal client = getClient();

        HashMap<String, Object> data = new HashMap<String, Object>();
        data.put("client", client.toString());
        data.put("clientSex", client.getSex().toString());
        data.put("clientBD", Converter.dateToString(client.getBorn()));
        data.put("clientAddress", client.getAddress().toString());

        DirectoryEnterpriseItem ent = getEnterprise();

        data.put("clientJob", ent == null ? "" : ent.getTitle());
       
        data.put("diagnosis", getDiagnosisClose().getMkb().getTitle());
        data.put("diseaseCode", getDiagnosisClose().getMkb().getDiseaseCode());
        Date dateFrom = getDateOpen().getTime();
        Date dateTill = getDateToWork().getTime();
       
       
        long dur = DateTimeUtils.daysBetween(dateFrom, dateTill);
        data.put("duration", String.valueOf(dur));
        data.put("date", Converter.dateToString(TimeLocal.getCurrentTime().getTime()));
        data.put("collab", UserInfo.get().getCollaboratorLocal().toString());

        creater.createReport(null, null, data.entrySet(), null);
        creater.finish();
    }

  private static final int        SICK_LIST_PAGE_WIGHT = 413;
  private static final int        SICK_LIST_SUBREPORT_PAGE_WIGHT = 350;
  public void printOverBlank() throws ClipsException{
    CombinedReportCreator    combined = ReporterFactory.createCombinedReporter(getClass(), 1);
    CombinedReportOptions    reportOptions = new CombinedReportOptions();
    reportOptions.setPageA5();
    reportOptions.setOrentation(PageOrentation.vertical);
    //reportOptions.reportWidht = SICK_LIST_PAGE_WIGHT;
    //reportOptions.reportHeight = 470;
    reportOptions.leftMargin = ClipsConfig.getInstance().getSicklistLeftMarign();
    reportOptions.fixRightMarign(SICK_LIST_SUBREPORT_PAGE_WIGHT);
    reportOptions.topMargin = ClipsConfig.getInstance().getSicklistTopMarign();
    reportOptions.bottomMargin = 0;
    combined.setUpReport(null, reportOptions, null);
        FormReportCreator      creator = combined.createFormReporter(getClass(), 3);

        GregorianCalendar dateFrom = getDateOpen();

        ClientLocal client = getClient();

        HashMap<String, Object> data = new HashMap<String, Object>();
        data.put("client", client.toString());
        data.put("client_is_male", client.getSex().isMale());
    if (client.getBorn() != null){
      data.put("client_age", DateTimeUtils.calcAge(client.getBorn(), dateFrom.getTime()));
    }
    else{
      data.put("client_age", null);
    }
    data.put("emc_code", client.getNumberEmc());
   
    if (getProlongationCount() > 0){
      Address      adr = getSerRen(0).getPolisData().getAddress();
      if (adr == null){
        adr = client.getAddress();
      }
      data.put("client_address", adr == null? null: adr.toStringShort());
    }
    if (getOpener() == null){
      data.put("collaborator", getAltOpener());
    }
    else{
      ClientLocal      clolClient = new ClientLocal(getOpener().getDetails().getClient(), null);
      data.put("collaborator", clolClient.getSurname().getTitle());
    }

        DirectoryEnterpriseItem ent = getEnterprise();

        data.put("clientJob", ent == null ? getOtherDirection() : ent.getTitle());

    data.put("prev_sick_list_id", getPreviousSicklist() == null? null: getPreviousSicklist().getSerial());
    data.put("day_month_open", dateFrom.get(GregorianCalendar.DAY_OF_MONTH) + " " + DateTimeUtils.monthToString(dateFrom.get(GregorianCalendar.MONTH)));
    String      yearOp = "" + dateFrom.get(GregorianCalendar.YEAR);
    data.put("year_open", yearOp.substring(yearOp.length() - 2));
    data.put("date_open", dateFrom.getTime());
        data.put("dis_type", getDisability().getID());
    data.put("date_close", getDateToWork() == null? null: getDateToWork().getTime());
    if (getProlongationCount() > 0){
      GregorianCalendar dateTill = getTill(0);
      data.put("date_till_1", dateTill == null? null: dateTill.getTime());
    }
    else{
      data.put("date_till_1", null);
    }
    if (getProlongationCount() > 1){
      GregorianCalendar dateTill = getTill(1);
      data.put("date_till_2", dateTill == null? null: dateTill.getTime());
    }
    else{
      data.put("date_till_2", null);
    }
    if (getProlongationCount() > 2){
      GregorianCalendar dateTill = getTill(2);
      data.put("date_till_3", dateTill == null? null: dateTill.getTime());
    }
    else{
      data.put("date_till_3", null);
    }
    if (getProlongationCount() > 3){
      GregorianCalendar dateTill = getTill(3);
      data.put("date_till_4", dateTill == null? null: dateTill.getTime());
    }
    else{
      data.put("date_till_4", null);
    }

        creator.createReport(null, null, data.entrySet(), null);
        creator.finish();
    combined.finish();
  }

  class DECDiagnosis extends DelegateSecondaryCacheDgt<DiagnosisLocal>{
    SicklistBeanRemote.DiagType          type;

    public DECDiagnosis(SecondaryCacheManager contaner, SicklistBeanRemote.DiagType type) throws ClipsException {
      super(contaner, true, "дигноз");
      this.type = type;
    }

    @Override
    protected DiagnosisLocal init() throws Exception {
      switch (type){
        case open:
          return getDetails().diagOpenID == 0? null: new DiagnosisLocal(getDetails().diagOpenID, getAuditListener());
        case close:
          return getDetails().diagCloseID == 0? null: new DiagnosisLocal(getDetails().diagCloseID, getAuditListener());
        default:
          throw new RuntimeException();
      }
    }

    @Override
    protected void setPrimary(DiagnosisLocal data) throws ClipsException {
      int      id = data == null? 0: data.getID();
      switch (type){
        case open:
          getDetails().diagOpenID = id;
          break;
        case close:
          getDetails().diagCloseID = id;
          break;
        default:
          throw new RuntimeException();
      }
     
    }

  }

    private DelegateSecondaryCacheDgt<SerRenLocal> serrenClosed
            = new DelegateSecondaryCacheDgt<SerRenLocal>(getSCM(), true, "услуге, в рамках которой произведено закрытие") {

        @Override
        protected SerRenLocal init() throws Exception {
            if (getDetails().serrenCloseID != 0){
                return new SerRenLocal(getDetails().serrenCloseID, getAuditListener());
            }else{
                return null;
            }
        }

        @Override
        protected void setPrimary(SerRenLocal type) throws ClipsException {
            if (type != null){
                getDetails().serrenCloseID = type.getID();
            }else{
                getDetails().serrenCloseID = 0;
            }
        }
    };

    private class SerrenCacheList extends DelegateExtraDataRO<ArrayList<SerRenLocal>> {

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

        @Override
        protected ArrayList<SerRenLocal> init() throws Exception {
            ArrayList<SerRenLocal> res = new ArrayList<SerRenLocal>();
            for (SickLongDetails sld  : getDetails().sickLongList) {
                res.add(new SerRenLocal(sld.serrenID, getAuditListener()));
            }
            return res;
        }

        @Override
        protected ArrayList<SerRenLocal> initNew() {
            return new ArrayList<SerRenLocal>();
        }
    }

}

TOP

Related Classes of clips.delegate.doctor.sicklist.SicklistLocal$DECDiagnosis

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.