/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.api.db;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import org.openmrs.CareSetting;
import org.openmrs.Concept;
import org.openmrs.ConceptClass;
import org.openmrs.Encounter;
import org.openmrs.Order;
import org.openmrs.OrderFrequency;
import org.openmrs.OrderGroup;
import org.openmrs.OrderType;
import org.openmrs.Patient;
import org.openmrs.User;
import org.openmrs.api.APIException;
/**
* Order-related database functions
* <p>
* This class should never be used directly. It should only be used through the
* {@link org.openmrs.api.OrderService}
*
* @see org.openmrs.api.OrderService
*/
public interface OrderDAO {
/**
* @see org.openmrs.api.OrderService#saveOrder(org.openmrs.Order, org.openmrs.api.OrderContext)
*/
public Order saveOrder(Order order) throws DAOException;
/**
* @see org.openmrs.api.OrderService#purgeOrder(Order)
*/
public void deleteOrder(Order order) throws DAOException;
/**
* @see org.openmrs.api.OrderService#getOrder(Integer)
*/
public Order getOrder(Integer orderId) throws DAOException;
/**
* This searches for orders given the parameters. Most arguments are optional (nullable). If
* multiple arguments are given, the returned orders will match on all arguments. The orders are
* sorted by startDate with the latest coming first
*
* @param orderType The type of Order to get
* @param patients The patients to get orders for
* @param concepts The concepts in order.getConcept to get orders for
* @param orderers The orderers to match on
* @param encounters The encounters that the orders are assigned to
* @return list of Orders matching the parameters
*/
public List<Order> getOrders(OrderType orderType, List<Patient> patients, List<Concept> concepts, List<User> orderers,
List<Encounter> encounters);
/**
* @see org.openmrs.api.OrderService#getOrders(org.openmrs.Patient, org.openmrs.CareSetting,
* org.openmrs.OrderType, boolean)
*/
public List<Order> getOrders(Patient patient, CareSetting careSetting, List<OrderType> orderTypes,
boolean includeVoided, boolean includeDiscontinuationOrders);
/**
* @param uuid
* @return order or null
*/
public Order getOrderByUuid(String uuid);
/**
* Delete Obs that references an order
*/
public void deleteObsThatReference(Order order);
/**
* @see org.openmrs.api.OrderService#getOrderByOrderNumber(java.lang.String)
*/
public Order getOrderByOrderNumber(String orderNumber);
/**
* Gets the next available order number seed
*
* @return the order number seed
*/
public Long getNextOrderNumberSeedSequenceValue();
/**
* @see org.openmrs.api.OrderService#getActiveOrders(org.openmrs.Patient, org.openmrs.OrderType,
* org.openmrs.CareSetting, java.util.Date)
*/
public List<Order> getActiveOrders(Patient patient, List<OrderType> orderTypes, CareSetting careSetting, Date asOfDate);
/**
* Get care setting by type
*
* @param careSettingId
* @return the care setting type
*/
public CareSetting getCareSetting(Integer careSettingId);
/**
* @see org.openmrs.api.OrderService#getCareSettingByUuid(String)
*/
public CareSetting getCareSettingByUuid(String uuid);
/**
* @see org.openmrs.api.OrderService#getCareSettingByName(String)
*/
public CareSetting getCareSettingByName(String name);
/**
* @see org.openmrs.api.OrderService#getCareSettings(boolean)
*/
public List<CareSetting> getCareSettings(boolean includeRetired);
/**
* @see org.openmrs.api.OrderService#getOrderTypeByName(String)
*/
public OrderType getOrderTypeByName(String orderTypeName);
/**
* @see org.openmrs.api.OrderService#getOrderFrequency
*/
public OrderFrequency getOrderFrequency(Integer orderFrequencyId);
/**
* @see org.openmrs.api.OrderService#getOrderFrequencyByUuid
*/
public OrderFrequency getOrderFrequencyByUuid(String uuid);
/**
* @see org.openmrs.api.OrderService#getOrderFrequencies(boolean)
*/
List<OrderFrequency> getOrderFrequencies(boolean includeRetired);
/**
* @see org.openmrs.api.OrderService#getOrderFrequencies(String, java.util.Locale, boolean, boolean)
*/
public List<OrderFrequency> getOrderFrequencies(String searchPhrase, Locale locale, boolean exactLocale,
boolean includeRetired);
/**
* @see org.openmrs.api.OrderService#saveOrderFrequency(org.openmrs.OrderFrequency)
*/
public OrderFrequency saveOrderFrequency(OrderFrequency orderFrequency);
/**
* @see org.openmrs.api.OrderService#purgeOrderFrequency(org.openmrs.OrderFrequency)
*/
public void purgeOrderFrequency(OrderFrequency orderFrequency);
/**
* Checks if an order frequency is being referenced by any order
*
* @param orderFrequency the order frequency
* @return true if in use, else false
*/
public boolean isOrderFrequencyInUse(OrderFrequency orderFrequency);
/**
* @see org.openmrs.api.OrderService#getOrderFrequencyByConcept
*/
public OrderFrequency getOrderFrequencyByConcept(Concept concept);
/**
* @see org.openmrs.api.OrderService#getOrderType
*/
public OrderType getOrderType(Integer orderTypeId);
/**
* @see org.openmrs.api.OrderService#getOrderTypeByUuid
*/
public OrderType getOrderTypeByUuid(String uuid);
/**
* @see org.openmrs.api.OrderService#getOrderTypes
*/
public List<OrderType> getOrderTypes(boolean includeRetired);
/**
* @see org.openmrs.api.OrderService#getOrderTypeByConceptClass(org.openmrs.ConceptClass)
*/
public OrderType getOrderTypeByConceptClass(ConceptClass conceptClass);
/**
* @see org.openmrs.api.OrderService#saveOrderType(org.openmrs.OrderType)
*/
public OrderType saveOrderType(OrderType orderType);
/**
* @see org.openmrs.api.OrderService#purgeOrderType(org.openmrs.OrderType)
*/
public void purgeOrderType(OrderType orderType);
/**
* @see org.openmrs.api.OrderService#getSubtypes(org.openmrs.OrderType, boolean)
*/
public List<OrderType> getOrderSubtypes(OrderType orderType, boolean includeRetired);
/**
* Check whether give order type is used by any order
*
* @param orderType the order type to check the usage
* @return true if used else false
*/
public boolean isOrderTypeInUse(OrderType orderType);
/**
* @see org.openmrs.api.OrderService#getDiscontinuationOrder(Order)
*/
public Order getDiscontinuationOrder(Order order);
/**
* @see org.openmrs.api.OrderService#getRevisionOrder(org.openmrs.Order)
*/
public Order getRevisionOrder(Order order) throws APIException;
/**
* Get the fresh order from the database
*
* @param order the order to get from the database
* @param isOrderADrugOrder is the order a previous order
* @return a list of orders from the database
*/
public List<Object[]> getOrderFromDatabase(Order order, boolean isOrderADrugOrder) throws APIException;
/**
* Saves an orderGroup to the database
*
* @param orderGroup
* @return an orderGroup
* @throws DAOException
*/
public OrderGroup saveOrderGroup(OrderGroup orderGroup) throws DAOException;
/**
* @see org.openmrs.api.OrderService#getOrderGroupByUuid(String)
*/
public OrderGroup getOrderGroupByUuid(String uuid) throws DAOException;
/**
* @see org.openmrs.api.OrderService#getOrderGroup(Integer)
*/
public OrderGroup getOrderGroupById(Integer orderGroupId) throws DAOException;
}