/*
* The contents of this file are subject to the OpenMRS Public License
* Version 2.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) OpenHMIS. All Rights Reserved.
*/
package org.openmrs.module.openhmis.cashier.api;
import java.util.Date;
import java.util.List;
import org.openmrs.Provider;
import org.openmrs.module.openhmis.cashier.api.model.Timesheet;
import org.openmrs.module.openhmis.commons.api.entity.IEntityDataService;
/**
* Interface that represents classes which perform data operations for {@link Timesheet}s.
*/
public interface ITimesheetService extends IEntityDataService<Timesheet> {
/**
* Gets the current {@link Timesheet} that the specified {@link Provider}.
* @param cashier The cashier.
* @return The {@link Timesheet} or {@code null} is the cashier is not clocked in.
* @should return the current timesheet for the cashier
* @should return null if the cashier has no timesheets
* @should return the most recent timesheet if the cashier is clocked into multiple timesheets
* @should return null if the timesheet is clocked out
*/
Timesheet getCurrentTimesheet(Provider cashier);
/**
* Gets all the {@link Timesheet}'s for the specified user on the specified day.
* @param cashier The cashier.
* @param date The date.
* @return All the timesheets for the cashier on the specified day.
* @should return empty list if there are no timesheets for date
* @should return timesheets that start and end on date
* @should return timesheets that start on date and end on different date
* @should return timesheet that start on different date and end on date
* @should return timesheets that start before date but end after date
* @should return timesheets that start before date and have not ended
*/
List<Timesheet> getTimesheetsByDate(Provider cashier, Date date);
/**
* Closes all open {@link Timesheet}'s.
* @should return close all open timesheets
*/
void closeOpenTimesheets();
}