Description
- FormFilter module adds the capability to restrict the list of available forms on form entry of patient dashboard.
- This module depends on FormEntry module.
- Steps to assign a filter to a form are described here.
- Currently FormFilter module restricts form list on patient dashboard mainly by 3 scenarios
1. Patient , on who's dashboard the form is shown.
2. User , who want to view form list on a patient dashboard.
3. General , other factors.
Implementation
- All filters implement FormFilterHandler interface and shouldDisplayForm(Patient p, User u) method which returns true or false based on filter properties.
/** * 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.module.formfilter; import org.openmrs.Patient; import org.openmrs.User; /** * This interface helps to create form filters. * @author goutham */ public interface FormFilterHandler { /** * This method holds the logic to return true or false for given * Patient and User. * * @return True/False ,if filter properties satisfy provided condition. */ public boolean shouldDisplayForm(Patient p, User u); }
- Data Model
Filter properties are stored in format of key value pair (Example : key1=value1&key2=value2 , similarly) in formfilter_filter_property.properties column.
Note
- Filtering is based on "Anding" i.e any one assigned filter fails its condition ,form fails to show on dashboard.
- All filters should have a single string parameter constructor.It takes filter properties as input. This constructor can be used to initialize filter properties.
Example:package org.openmrs.module.formfilter.impl; import java.lang.reflect.Field; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openmrs.Patient; import org.openmrs.User; import org.openmrs.module.formfilter.FormFilterHandler; /** * This class will provide patient age based form filter. */ public class AgeFormFilter implements FormFilterHandler { protected Log log = LogFactory.getLog(getClass()); /** * Default Constructor */ public AgeFormFilter() { } /** * Constructor sets class field values. * @param properties ,string property from FormFilterProperty class in key=value based format * Example: minimumAge=value&maximumAge=value */ public AgeFormFilter(String properties){ for (String string : properties.split("&")) { String str[]=string.split("="); try { Field field=this.getClass().getDeclaredField(str[0]); field.set(this, (Object)Integer.parseInt(str[1])); }catch (Exception e) { log.info(e); } } } private int minimumAge; private int maximumAge; /** * @return minimumAge */ public int getMinimumAge() { return minimumAge; } /** * Sets maximumAge * * @param maximumAge */ public void setMinimumAge(int minimumAge) { this.minimumAge = minimumAge; } /** * @return maximumAge */ public int getMaximumAge() { return maximumAge; } /** * Sets maximumAge * * @param maximumAge */ public void setMaximumAge(int maximumAge) { this.maximumAge = maximumAge; } /** * @see org.openmrs.module.formfilter.FormFilterHandler#shouldDisplayForm(org.openmrs.Patient, org.openmrs.User) * @return True , if patient age lies between minimumAge and maximumAge. * @return False, if patient age does not between minimumAge and maximumAge. */ @Override public boolean shouldDisplayForm(Patient p, User u) { // TODO Auto-generated method stub if((p.getAge()>=minimumAge) && (p.getAge()<=maximumAge)) { return true; } return false; } }
Filters
Based on the 3 categories currently they are 6 filters.
1) Age Form Filter
Patient age should lie between the filter minimum and maximum age.
Parameters: a) Minimum Age b) Maximum Age
Example:
Filter returns true if patient age is between 10(minimum age) and 30(maximum age).
2)Gender Form Filter
Patients gender should match with the filter age.
Parameter: a)Gender
Filter returns true if patient gender is Male.
3)Cohort Form Filter
Patient should be defined in the cohort.
Parameter: a)Cohort
Form is shown on dashboard if the patient is defined in "Male Cohort"
4)Date Form Filter
Form is shown compared to today date.
Parameter: a) Date b) when to show "before" or "after".
Example:
Form is shown "before" 15/08/2012(date)
5)Role Form Filter
Form is shown if the user has specific role.
Parameter: a) Role
Example:
Form is shown if user has "System Developer" role.
6)Privilege Form Filter
Form is shown if the user has specific privilege.
Parameter: a)Privilege
Example:
Form is shown if user has "Form Entry" privilege.