/** * 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.text.DateFormat; import java.util.Date; import java.util.Locale; import org.openmrs.Cohort; import org.openmrs.Concept; import org.openmrs.ConceptName; import org.openmrs.api.PatientSetService; import org.openmrs.api.PatientSetService.TimeModifier; import org.openmrs.api.context.Context; import org.openmrs.report.EvaluationContext; import org.openmrs.util.OpenmrsUtil; /** * @deprecated see reportingcompatibility module */ @Deprecated public class ObsPatientFilter extends CachingPatientFilter { private static final long serialVersionUID = 1L; private Concept question; private PatientSetService.Modifier modifier; private PatientSetService.TimeModifier timeModifier; private Object value; private Integer withinLastDays; private Integer withinLastMonths; private Integer untilDaysAgo; private Integer untilMonthsAgo; private Date sinceDate; private Date untilDate; public ObsPatientFilter() { super.setType("Patient Filter"); super.setSubType("Observation Patient Filter"); } @Override public String getCacheKey() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getName()).append("."); if (getQuestion() != null) sb.append(getQuestion().getConceptId()); sb.append("."); sb.append(getModifier()).append("."); sb.append(getTimeModifier()).append("."); sb.append( OpenmrsUtil.fromDateHelper(null, getWithinLastDays(), getWithinLastMonths(), getUntilDaysAgo(), getUntilMonthsAgo(), getSinceDate(), getUntilDate())).append("."); sb.append( OpenmrsUtil.toDateHelper(null, getWithinLastDays(), getWithinLastMonths(), getUntilDaysAgo(), getUntilMonthsAgo(), getSinceDate(), getUntilDate())).append("."); sb.append(getValue()); return sb.toString(); } public boolean isReadyToRun() { if (question == null) return value != null && (value instanceof Concept); if (question.getDatatype().getHl7Abbreviation().equals("NM") || question.getDatatype().getHl7Abbreviation().equals("DT") || question.getDatatype().getHl7Abbreviation().equals("TS")) { if (getTimeModifier() == TimeModifier.ANY || getTimeModifier() == TimeModifier.NO) return true; else return getValue() != null && getModifier() != null; } else if (question.getDatatype().getHl7Abbreviation().equals("ST")) { if (getTimeModifier() == TimeModifier.ANY || getTimeModifier() == TimeModifier.NO) return true; else return getValue() != null; } else if (question.getDatatype().getHl7Abbreviation().equals("CWE")) { if (getTimeModifier() == TimeModifier.ANY || getTimeModifier() == TimeModifier.NO) return true; else return getValue() != null; } else { return false; } } public boolean checkConsistancy() { if (!isReadyToRun()) return false; if (question == null) return value != null && (value instanceof Concept); if (question.getDatatype().getHl7Abbreviation().equals("NM") || question.getDatatype().getHl7Abbreviation().equals("DT") || question.getDatatype().getHl7Abbreviation().equals("TS")) { return true; } else if (question.getDatatype().getHl7Abbreviation().equals("ST")) { TimeModifier tm = getTimeModifier(); return tm == TimeModifier.ANY || tm == TimeModifier.NO || tm == TimeModifier.FIRST || tm == TimeModifier.LAST; } else if (question.getDatatype().getHl7Abbreviation().equals("CWE")) { TimeModifier tm = getTimeModifier(); return tm == TimeModifier.ANY || tm == TimeModifier.NO || tm == TimeModifier.FIRST || tm == TimeModifier.LAST; } else { return false; } } @Override public Cohort filterImpl(EvaluationContext context) { PatientSetService service = Context.getPatientSetService(); return service.getPatientsHavingObs(question == null ? null : question.getConceptId(), timeModifier, modifier, value, OpenmrsUtil.fromDateHelper(null, getWithinLastDays(), getWithinLastMonths(), getUntilDaysAgo(), getUntilMonthsAgo(), getSinceDate(), getUntilDate()), OpenmrsUtil.toDateHelper(null, getWithinLastDays(), getWithinLastMonths(), getUntilDaysAgo(), getUntilMonthsAgo(), getSinceDate(), getUntilDate())); } public String getDescription() { Locale locale = Context.getLocale(); StringBuffer ret = new StringBuffer(); if (question == null) { if (getValue() != null) ret.append("Patients with " + timeModifier + " obs with value " + ((Concept) value).getName().getName()); else ret.append("question and value are both null"); } else { ret.append("Patients with "); ret.append(timeModifier + " "); ConceptName questionName = null; if (question == null) ret.append("CONCEPT"); else if ((questionName = question.getName(locale, false)) != null) ret.append(questionName); else { question = Context.getConceptService().getConcept(question.getConceptId()); questionName = question.getName(locale, false); ret.append(questionName); } if (value != null && modifier != null) { ret.append(" " + modifier.getSqlRepresentation() + " "); if (value instanceof Concept) ret.append(((Concept) value).getName(locale)); else ret.append(value); } } if (withinLastDays != null || withinLastMonths != null) { ret.append(" within last"); if (withinLastMonths != null) ret.append(" " + withinLastMonths + " months"); if (withinLastDays != null) ret.append(" " + withinLastDays + " days"); } if (untilDaysAgo != null || untilMonthsAgo != null) { ret.append(" until"); if (untilMonthsAgo != null) ret.append(" " + untilMonthsAgo + " months"); if (untilDaysAgo != null) ret.append(" " + untilDaysAgo + " months"); ret.append(" ago"); } DateFormat df = null; if (sinceDate != null || untilDate != null) df = DateFormat.getDateInstance(DateFormat.SHORT, Context.getLocale()); if (sinceDate != null) ret.append(" since " + df.format(sinceDate)); if (untilDate != null) ret.append(" until " + df.format(untilDate)); return ret.toString(); } public PatientSetService.Modifier getModifier() { return modifier; } public void setModifier(PatientSetService.Modifier modifier) { this.modifier = modifier; } public Concept getQuestion() { return question; } public void setQuestion(Concept question) { this.question = question; } public Date getSinceDate() { return sinceDate; } public void setSinceDate(Date sinceDate) { this.sinceDate = sinceDate; } public PatientSetService.TimeModifier getTimeModifier() { return timeModifier; } public void setTimeModifier(PatientSetService.TimeModifier timeModifier) { this.timeModifier = timeModifier; } public Date getUntilDate() { return untilDate; } public void setUntilDate(Date untilDate) { this.untilDate = untilDate; } public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } 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 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; } }