/**
* TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L.
* Copyright (C) 2007 Autentia Real Bussiness Solution S.L.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.autentia.tnt.bean.occupation;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import com.autentia.jsf.component.ocupation.OcupationEntry;
import com.autentia.jsf.component.ocupation.OcupationModel;
import com.autentia.tnt.bean.BaseBean;
import com.autentia.tnt.businessobject.Holiday;
import com.autentia.tnt.businessobject.HolidayState;
import com.autentia.tnt.businessobject.Occupation;
import com.autentia.tnt.businessobject.RequestHoliday;
import com.autentia.tnt.businessobject.User;
import com.autentia.tnt.dao.SortCriteria;
import com.autentia.tnt.dao.search.HolidaySearch;
import com.autentia.tnt.dao.search.OccupationSearch;
import com.autentia.tnt.dao.search.RequestHolidaySearch;
import com.autentia.tnt.dao.search.UserSearch;
import com.autentia.tnt.manager.activity.OccupationManager;
import com.autentia.tnt.manager.admin.UserManager;
import com.autentia.tnt.manager.holiday.HolidayManager;
import com.autentia.tnt.manager.holiday.RequestHolidayManager;
import com.autentia.tnt.util.DateUtils;
import com.autentia.tnt.util.FacesUtils;
public class AvailabilityBean extends BaseBean {
private static final long serialVersionUID = 1L;
private final UserManager userMgr = UserManager.getDefault();
private Date selectedDate = null;
public AvailabilityBean() {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.set(Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, cal.getMinimum(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, cal.getMinimum(Calendar.MINUTE));
cal.set(Calendar.SECOND, cal.getMinimum(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cal.getMinimum(Calendar.MILLISECOND));
selectedDate = cal.getTime();
}
public List<Availability> getAll() {
List<Availability> ret = new ArrayList<Availability>();
UserSearch searchUser = new UserSearch();
searchUser.setActive(true);
SortCriteria sCriteria = new SortCriteria("name");
List<User> users = userMgr.getAllEntities(searchUser,sCriteria);
for (User user : users) {
OcupationModelImpl model = new OcupationModelImpl();
Availability availability = new Availability();
availability.setUser(user);
availability.setModel(model);
fillModelHolidays(user,model);
fillAvailability(user, model);
ret.add(availability);
}
return ret;
}
private void fillAvailability(User user, OcupationModel model) {
Calendar calMin = Calendar.getInstance();
Calendar calMax = Calendar.getInstance();
calMin.setTime(selectedDate);
calMin.set(Calendar.DAY_OF_MONTH, calMin.getMinimum(Calendar.DAY_OF_MONTH));
calMin.set(Calendar.HOUR_OF_DAY, calMin.getMinimum(Calendar.HOUR_OF_DAY));
calMin.set(Calendar.MINUTE, calMin.getMinimum(Calendar.MINUTE));
calMin.set(Calendar.SECOND, calMin.getMinimum(Calendar.SECOND));
calMin.set(Calendar.MILLISECOND, calMin.getMinimum(Calendar.MILLISECOND));
calMax.setTime(selectedDate);
calMax.set(Calendar.DAY_OF_MONTH, calMax.getMaximum(Calendar.DAY_OF_MONTH));
calMax.set(Calendar.HOUR_OF_DAY, calMax.getMaximum(Calendar.HOUR_OF_DAY));
calMax.set(Calendar.MINUTE, calMax.getMaximum(Calendar.MINUTE));
calMax.set(Calendar.SECOND, calMax.getMaximum(Calendar.SECOND));
calMax.set(Calendar.MILLISECOND, calMax.getMaximum(Calendar.MILLISECOND));
calMin.add(Calendar.MONTH, -1);
calMax.add(Calendar.MONTH, 1);
OccupationManager ocManager = OccupationManager.getDefault();
OccupationSearch ocSearch = new OccupationSearch();
ocSearch.setStartOccupationDate(calMin.getTime());
ocSearch.setEndOccupationDate(calMax.getTime());
ocSearch.setUser(user);
for(Occupation oc:ocManager.getAllEntities(ocSearch,null)) {
OcupationEntryImpl oce = new OcupationEntryImpl();
oce.setStart(DateUtils.minHourInDate(oc.getStartDate()));
oce.setEnd(DateUtils.maxHourInDate(oc.getEndDate()));
oce.setVacances(false);
oce.setDescription(oc.getProject().getName()+"("+oc.getProject().getClient().getName()+"). "+oc.getDescription());
oce.setDuration(oc.getDuration());
model.addOcupationEntry(oce);
}
}
/**
* Fill holidays in listOccupations for that user.
* @param user
* @param listOccupations
*/
private void fillModelHolidays(User user, OcupationModel model) {
Calendar calMin = Calendar.getInstance();
Calendar calMax = Calendar.getInstance();
calMin.setTime(selectedDate);
calMin.set(Calendar.DAY_OF_MONTH, calMin.getMinimum(Calendar.DAY_OF_MONTH));
calMin.set(Calendar.HOUR_OF_DAY, calMin.getMinimum(Calendar.HOUR_OF_DAY));
calMin.set(Calendar.MINUTE, calMin.getMinimum(Calendar.MINUTE));
calMin.set(Calendar.SECOND, calMin.getMinimum(Calendar.SECOND));
calMin.set(Calendar.MILLISECOND, calMin.getMinimum(Calendar.MILLISECOND));
calMax.setTime(selectedDate);
calMax.set(Calendar.DAY_OF_MONTH, calMax.getMaximum(Calendar.DAY_OF_MONTH));
calMax.set(Calendar.HOUR_OF_DAY, calMax.getMaximum(Calendar.HOUR_OF_DAY));
calMax.set(Calendar.MINUTE, calMax.getMaximum(Calendar.MINUTE));
calMax.set(Calendar.SECOND, calMax.getMaximum(Calendar.SECOND));
calMax.set(Calendar.MILLISECOND, calMax.getMaximum(Calendar.MILLISECOND));
calMin.add(Calendar.MONTH, -1);
calMax.add(Calendar.MONTH, 1);
RequestHolidayManager rhManager = RequestHolidayManager.getDefault();
RequestHolidaySearch rhSearch = new RequestHolidaySearch();
rhSearch.setUserRequest(user);
rhSearch.setState(HolidayState.ACCEPT);
rhSearch.setStartBeginDate(calMin.getTime());
rhSearch.setEndBeginDate(calMax.getTime());
rhSearch.setStartFinalDate(calMin.getTime());
rhSearch.setEndFinalDate(calMax.getTime());
List<RequestHoliday> listH = rhManager.getAllEntities(rhSearch, null);
for (RequestHoliday rH : listH) {
OcupationEntryImpl oc = new OcupationEntryImpl();
oc.setStart(DateUtils.minHourInDate(rH.getBeginDate()));
oc.setEnd(DateUtils.maxHourInDate(rH.getFinalDate()));
oc.setVacances(true);
oc.setHoliday(false);
oc.setDescription(FacesUtils.getMessage("activity.acceptedHolidays"));
model.addOcupationEntry(oc);
}
HolidaySearch monthSearch = new HolidaySearch();
HolidayManager holidayManager = HolidayManager.getDefault();
monthSearch.setStartDate(calMin.getTime());
monthSearch.setEndDate(calMax.getTime());
List<Holiday> listaHolidays = holidayManager.getAllEntities(monthSearch, null);
for (Holiday holiday : listaHolidays) {
OcupationEntryImpl oc = new OcupationEntryImpl();
oc.setStart(DateUtils.minHourInDate(holiday.getDate()));
oc.setEnd(DateUtils.maxHourInDate(holiday.getDate()));
oc.setVacances(false);
oc.setHoliday(true);
oc.setDescription(holiday.getDescription());
model.addOcupationEntry(oc);
}
}
public Date getSelectedDate() {
return selectedDate;
}
public void setSelectedDate(Date selectedDate) {
this.selectedDate = selectedDate;
}
}