/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package beans.expenditure;
import framework.beans.SecuredBean;
import framework.beans.security.BeanRights;
import beans.directory.service.entity.Service;
import beans.expenditure.entity.ExpenditureDefault;
import beans.expenditure.entity.ExpenditureDetails;
import beans.directory.expenditure.entity.ExpenditureType;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import framework.generic.ClipsServerException;
import framework.generic.EDataIntegrity;
import javax.ejb.EJBException;
import javax.ejb.Stateful;
import beans.UserRightsSet; import framework.security.RightChecker;
/**
* Бин контролирует дефолтовые расходные материалы
* @security - Ok.
* @author axe
*/
@Stateful(mappedName="clips-beans/ExpenditureBean")
public class ExpenditureBean extends SecuredBean implements ExpenditureBeanRemote {
public static int COMMAND_WRITE_EXPENDITURE = 0;
/**
* Возвращает список расходных материалов
* @return список расходных материалов
*/
@Override
public List<ExpenditureDetails> getExpenditureList(int serviceID) throws ClipsServerException {
Service service = findEntity(Service.class, serviceID);
Collection<ExpenditureDefault> list = findEntityList(ExpenditureDefault.class, "service", service);
List<ExpenditureDetails> res = new ArrayList<ExpenditureDetails>();
Iterator<ExpenditureDefault> i = list.iterator();
while(i.hasNext()) {
ExpenditureDefault j = (ExpenditureDefault) i.next();
res.add(j.getDetails((RightChecker) this));
}
return res;
}
@Override
protected void initBeanRights() {
int [] r = new int [1];
r[COMMAND_WRITE_EXPENDITURE] = RightPresence(UserRightsSet.WRITE_EXPENDITURE_DEFAULT.id);
rights = new BeanRights(r);
}
/**
* Добавляет или обновляет расходные материалы. Если details.id = 0 сущность создается,
* иначе обновляется существующая с заданным идентификатором.
* @param details данные
* @return идентификатор сущности
* @throws EJBException в случае если обновление отвергнуто системой
* безопастности либо произошла ошибка *
*/
@Override
public int setExpenditure(ExpenditureDetails details) throws ClipsServerException {
checkCommandAccessibility(COMMAND_WRITE_EXPENDITURE);
ExpenditureDefault exp = null;
if(details.id != 0) {
exp = findEntity(ExpenditureDefault.class, details.id);
if(details.parentID != exp.getService().getId()) {
throw new EDataIntegrity("Подмена услуги запрещена");
}
} else {
exp = new ExpenditureDefault();
exp.setService(findEntity(Service.class, details.parentID));
}
exp.setQuantity(details.quantity);
exp.setType(findEntity(ExpenditureType.class, details.expenTypeID));
return saveEntity(exp);
}
/**
* Удаляет расходные материалы.
* @param id идентификатор
* @throws EJBException в случае если обновление отвергнуто системой
* безопастности либо произошла ошибка *
*/
@Override
public void removeExpenditure(int id) throws ClipsServerException {
checkCommandAccessibility(COMMAND_WRITE_EXPENDITURE);
ExpenditureDefault exp = findEntity(ExpenditureDefault.class, id);
removeEntity(exp);
}
}