/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.reporting; import java.util.Date; import java.util.Iterator; import java.util.List; import org.openmrs.Cohort; import org.openmrs.Concept; import org.openmrs.ConceptName; import org.openmrs.Drug; import org.openmrs.api.context.Context; import org.openmrs.report.EvaluationContext; import org.openmrs.util.OpenmrsUtil; /** * @deprecated see reportingcompatibility module */ @Deprecated public class DrugOrderStopFilter extends CachingPatientFilter { private Date stopDate; private List<Drug> drugList; private List<Concept> genericDrugList; private Boolean discontinued; private List<Concept> discontinuedReasonList; private Integer withinLastDays; private Integer withinLastMonths; private Integer untilDaysAgo; private Integer untilMonthsAgo; private Date sinceDate; private Date untilDate; public DrugOrderStopFilter() { } @Override public String getCacheKey() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getName()).append("."); sb.append(getStopDate()).append("."); sb.append(getDiscontinued()).append("."); sb.append( OpenmrsUtil.fromDateHelper(null, withinLastDays, withinLastMonths, untilDaysAgo, untilMonthsAgo, sinceDate, untilDate)).append("."); sb.append( OpenmrsUtil.toDateHelper(null, withinLastDays, withinLastMonths, untilDaysAgo, untilMonthsAgo, sinceDate, untilDate)).append("."); if (drugList != null) for (Drug d : drugList) sb.append(d.getDrugId()).append(","); sb.append("."); if (genericDrugList != null) for (Concept c : genericDrugList) sb.append(c.getConceptId()).append(","); sb.append("."); if (discontinuedReasonList != null) for (Concept c : discontinuedReasonList) sb.append(c.getConceptId()).append(","); return sb.toString(); } public String getDescription() { StringBuilder sb = new StringBuilder(); sb.append("Patients who stopped or changed "); if ((getDrugList() != null && getDrugList().size() > 0) || (getGenericDrugList() != null && getGenericDrugList().size() > 0)) { if (getDrugList() != null && getDrugList().size() > 0) { if (getDrugList().size() == 1) sb.append(getDrugList().get(0).getName()); else { sb.append("any of ["); for (Iterator<Drug> i = getDrugList().iterator(); i.hasNext();) { sb.append(" " + i.next().getName() + " "); if (i.hasNext()) sb.append(","); } sb.append("]"); } } if (getGenericDrugList() != null && getGenericDrugList().size() > 0) { if (getGenericDrugList().size() == 1) sb.append("any form of " + getGenericDrugList().get(0).getName().getName()); else { sb.append("any form of ["); for (Iterator<Concept> i = getGenericDrugList().iterator(); i.hasNext();) { sb.append(" " + i.next().getName().getName() + " "); if (i.hasNext()) sb.append(","); } sb.append(" ]"); } } } else sb.append("any drug"); if (getDiscontinuedReasonList() != null && getDiscontinuedReasonList().size() > 0) { if (getDiscontinuedReasonList().size() == 1) { String reason = "[name not defined]"; ConceptName cn = getDiscontinuedReasonList().get(0).getName(); if (cn != null) reason = cn.getName(); sb.append(" because of " + reason); } else { sb.append(" because of any of ["); for (Iterator<Concept> i = getDiscontinuedReasonList().iterator(); i.hasNext();) { sb.append(" " + i.next().getName().getName() + " "); if (i.hasNext()) sb.append(","); } sb.append("]"); } } if (withinLastMonths != null || withinLastDays != null) { sb.append(" within the last "); if (withinLastMonths != null) sb.append(withinLastMonths + " month(s) "); if (withinLastDays != null) sb.append(withinLastDays + " day(s) "); } // TODO untilDaysAgo untilMonthsAgo if (sinceDate != null) sb.append(" on or after " + sinceDate + " "); if (untilDate != null) sb.append(" on or before " + untilDate + " "); return sb.toString(); } @Override public Cohort filterImpl(EvaluationContext context) { return Context.getPatientSetService().getPatientsHavingDrugOrder( getDrugList(), getGenericDrugList(), null, null, OpenmrsUtil.fromDateHelper(null, withinLastDays, withinLastMonths, untilDaysAgo, untilMonthsAgo, sinceDate, untilDate), OpenmrsUtil.toDateHelper(null, withinLastDays, withinLastMonths, untilDaysAgo, untilMonthsAgo, sinceDate, untilDate), discontinued, getDiscontinuedReasonList()); } public boolean isReadyToRun() { return getStopDate() != null; } // getters and setters public Boolean getDiscontinued() { return discontinued; } public void setDiscontinued(Boolean discontinued) { this.discontinued = discontinued; } public List<Concept> getDiscontinuedReasonList() { return discontinuedReasonList; } public void setDiscontinuedReasonList(List<Concept> discontinuedReasonList) { this.discontinuedReasonList = discontinuedReasonList; } public Date getStopDate() { return stopDate; } public void setStopDate(Date stopDate) { this.stopDate = stopDate; } public Date getSinceDate() { return sinceDate; } public void setSinceDate(Date sinceDate) { this.sinceDate = sinceDate; } public Date getUntilDate() { return untilDate; } public void setUntilDate(Date untilDate) { this.untilDate = untilDate; } public Integer getUntilDaysAgo() { return untilDaysAgo; } public void setUntilDaysAgo(Integer untilDaysAgo) { this.untilDaysAgo = untilDaysAgo; } public Integer getUntilMonthsAgo() { return untilMonthsAgo; } public void setUntilMonthsAgo(Integer untilMonthsAgo) { this.untilMonthsAgo = untilMonthsAgo; } public Integer getWithinLastDays() { return withinLastDays; } public void setWithinLastDays(Integer withinLastDays) { this.withinLastDays = withinLastDays; } public Integer getWithinLastMonths() { return withinLastMonths; } public void setWithinLastMonths(Integer withinLastMonths) { this.withinLastMonths = withinLastMonths; } public List<Drug> getDrugList() { return drugList; } public void setDrugList(List<Drug> drugList) { this.drugList = drugList; } public List<Concept> getGenericDrugList() { return genericDrugList; } public void setGenericDrugList(List<Concept> genericDrugList) { this.genericDrugList = genericDrugList; } }