Package beans.shedule.exceptions

Source Code of beans.shedule.exceptions.SheduleExceptionBean

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package beans.shedule.exceptions;

import framework.beans.SecuredBean;
import framework.beans.security.BeanRights;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import framework.generic.ClipsServerException;
import javax.ejb.Stateful;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import beans.UserRightsSet;import beans.directory.lpu.entity.Lpu;
import beans.user.collaborator.entities.Collaborator;
import framework.security.RightChecker;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
* Бин контролирующий работу исключительных дней, к коим относятся
* незапланированные праздники, предпраздничные дни, вынужденные дни
* простоя предприятия и тд
* @security OK
* Для просмотра права не нужны
* Для редактирования нужно право MODIFY_SHEDULE_EXCEPTIONS
* @author axe
*/
@Stateful(mappedName="clips-beans/SheduleExceptionBean")
public class SheduleExceptionBean extends SecuredBean
        implements SheduleExceptionBeanRemote {

    public static int COMMAND_MODIFY = 0;   
   
    @Override
    protected void initBeanRights() {
        int[] r = new int[1];
        r[COMMAND_MODIFY] = RightPresence(UserRightsSet.MODIFY_SHEDULE_EXCEPTIONS.id);
        rights = new BeanRights(r);
    }
   
    /**
     * Возвращает список исключительных дней для заданного месяца
     * @param month месяц (1-12)
     * @param year год (1900-2100)
     * @return ArrayList<SheduleHolidayDayDetails>
     * @security Нет ограничений
     */
    @SuppressWarnings("unchecked")
    @Override
    public List<SheduleExceptionDetails> getExceptionList(int month, int year) throws ClipsServerException {
        Calendar cal = GregorianCalendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month-1);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal = initCalendar(cal.getTime());
       
        Lpu lpu = findEntity(Collaborator.class, getCollaboratorId()).getLpu();
        Date begin = cal.getTime();
        cal.add(Calendar.MONTH, 1);
        Date end = cal.getTime();

        Field f[] = {
            new Field("day", begin, Field.OPERATOR_EQUAL_OR_MORE),
            new Field("day", end, Field.OPERATOR_LESS),
            new Field("lpu", lpu),
        };
        Iterator res = findEntityList(SheduleException.class, f, " ORDER By a.day").iterator();
        ArrayList<SheduleExceptionDetails> list = new ArrayList<SheduleExceptionDetails>();
        if(res.hasNext()) {
            while(res.hasNext()) {
               SheduleException sx = (SheduleException) res.next();
               list.add(sx.getDetails((RightChecker) this));
            }
        }
        return list;
    }

    private static Calendar initCalendar(Date day) {
        Calendar cal = GregorianCalendar.getInstance();
        cal.setTime(day);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal;
    }
   
    /**
     * Удаляет исключение в заданный день, день должен быть текущим или будущим, по
     * отнощению к текущему времени сервера
     * @param day день (1-31)
     * @param month месяц (1-12)
     * @param year год (1900-2100)
     * @throws generic.ClipsServerException
     * @security Вызывающий должен иметь право MODIFY_SHEDULE_EXCEPTIONS
     */
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    @Override
    public void removeException(Date day) throws ClipsServerException {
        checkCommandAccessibility(COMMAND_MODIFY);
        checkIsNotInThePast(day);


        Lpu lpu = findEntity(Collaborator.class, getCollaboratorId()).getLpu();
        Calendar cal = initCalendar(day);
        Date begin = cal.getTime();
        cal.add(Calendar.DAY_OF_MONTH, 1);
        Date end = cal.getTime();
       
        Field f[] = {
            new Field("day", begin, Field.OPERATOR_EQUAL_OR_MORE),
            new Field("day", end, Field.OPERATOR_LESS),
            new Field("lpu", lpu),
        };
        deleteEntityList(SheduleException.class, f);
    }  
   
    /**
     * Создает исключение в указанный день, день должен быть текущим или будущим, по
     * отнощению к текущему времени сервера
     * @param day день (1-31)
     * @param month месяц (1-12)
     * @param year год (1900-2100)
     * @param working true - рабочий день, false - нерабочий
     * @param desc описание исключения
     * @param timeBegin время начала смены если рабочий день. 0 - если время
     *      начала смены не изменено.
     * @param timeEnd время конца смены если рабочий день. 0 - если время
     *      конца смены не изменено.
     * @throws ClipsServerException
     * @security Вызывающий должен иметь право MODIFY_SHEDULE_EXCEPTIONS
     */
    @TransactionAttribute(TransactionAttributeType.REQUIRED)    
    @Override
    public int setException(Date day, boolean working, String desc,
            int timeBegin, int duration) throws ClipsServerException {
        checkCommandAccessibility(COMMAND_MODIFY);
        checkIsNotInThePast(day);
       
        Lpu lpu = findEntity(Collaborator.class, getCollaboratorId()).getLpu();
        Calendar cal = initCalendar(day);
        Date begin = cal.getTime();
        cal.add(Calendar.DAY_OF_MONTH, 1);
        Date end = cal.getTime();

        Field f[] = {
            new Field("day", begin, Field.OPERATOR_EQUAL_OR_MORE),
            new Field("day", end, Field.OPERATOR_LESS),
            new Field("lpu", lpu),
        };
        Iterator res = findEntityList(SheduleException.class, f).iterator();
       
        SheduleException sx = null;
        if(res.hasNext()) {
            sx = (SheduleException) res.next();
        } else {
            sx = new SheduleException();
            sx.setDay(begin);
        }
       
        sx.setDesc(desc);
        sx.setWorking(working);
        sx.setBegin(timeBegin);
        sx.setDuration(duration);
        sx.setLpu(lpu);

        int id = saveEntity(sx);
        return id;
   
}
TOP

Related Classes of beans.shedule.exceptions.SheduleExceptionBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.