Package beans.shedule.prorumble

Source Code of beans.shedule.prorumble.SheduleProrumbleBean

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

package beans.shedule.prorumble;

import beans.directory.simple.entities.ProrumbleType;
import framework.beans.FindEntity.Field;
import framework.beans.SecuredBean;
import framework.beans.security.BeanRights;
import beans.user.collaborator.entities.Collaborator;
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 framework.security.RightChecker;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
* Бин контролирует списки прогулов и отпусков сотрудников
* @security ok
* @author axe
*/
@Stateful(mappedName="clips-beans/SheduleProrumbleBean")
public class SheduleProrumbleBean extends SecuredBean 
    implements SheduleProrumbleBeanRemote {
   
    public static int COMMAND_MODIFY = 0;   
   
    @Override
    protected void initBeanRights() {
        int[] r = new int[1];
        r[COMMAND_MODIFY] = RightPresence(UserRightsSet.MODIFY_PRORUMBLE.id);
        rights = new BeanRights(r);
    }
   
    /**
     * Возвращает список прогулов и отпусков сотрудника, за указанный месяц
     * @param collid идентификатор сотрудника
     * @param month 1-12 месяц
     * @param year 1900-2100 год
     * @return список прогулов и отпусков
     * @security без ограничений
     */
    @SuppressWarnings("unchecked")
    @Override
    public List<ProrumbleDetails> getProrumbleList(int collid, int month, int year) throws ClipsServerException {
        if(month < 1 || month > 12
                || year < 1900 || year > 2100) {
            throw new IllegalArgumentException("Date ЧЧ.mm.yyyy: ХХ."
                    + "." + month + "." + year);
        }

        Calendar begin = getCalendar(1, month, year);
        Calendar end = (Calendar) begin.clone();
        end.add(Calendar.MONTH, 1);

        Field f[] = {
            new Field("collaborator", findEntity(Collaborator.class, collid)),
            new Field("day", begin.getTime(), Field.OPERATOR_EQUAL_OR_MORE),
            new Field("day", end.getTime(), Field.OPERATOR_LESS)
        };
        Iterator res = findEntityWhat(null, Prorumble.class, f, "ORDER By a.day").iterator();
        ArrayList<ProrumbleDetails> list = new ArrayList<ProrumbleDetails>();
        if(res.hasNext()) {
            while(res.hasNext()) {
               Prorumble sx = (Prorumble) res.next();
               list.add(sx.getDetails((RightChecker) this));
            }
        }
        return list;
    }

    /**
     * Назначается день отпуска или прогула
     * @param details
     * @throws generic.ClipsServerException
     * @security вызывающий должен иметь право MODIFY_PRORUMBLE, дата указанная
     * в деталях должна быть сегодняшней или в будущем
     */
    @TransactionAttribute(TransactionAttributeType.REQUIRED)    
    @Override
    public void setProrumble(ProrumbleDetails details) throws ClipsServerException {
        //rights
        checkCommandAccessibility(COMMAND_MODIFY);
        //ODZ
        if(details.day < 1 || details.day > 31
                || details.month < 1 || details.month > 12
                || details.year < 1900 || details.year > 2100) {
            throw new IllegalArgumentException("Date dd.mm.yyyy:"
                    + details.day + ":" + details.month + ":" + details.year);
        }
        List<Prorumble> list = getProrumbleList(details.day,
                details.month, details.year, details.collID);
       
        Prorumble sx = null;
        if(list.size() > 0) {
            sx = (Prorumble) list.get(0);
            sx.setType(findEntity(ProrumbleType.class, details.type));
            manager.merge(sx);
        } else {
            sx = new Prorumble();
            sx.setDay(getCalendar(details.day, details.month, details.year).getTime());
            sx.setCollaborator(findEntity(Collaborator.class, details.collID));
            sx.setType(findEntity(ProrumbleType.class, details.type));
            manager.persist(sx);
        }
    }

    /**
     * Удаляет запись о прогуле или отпске
     * @param collid сотрудник
     * @param day 1-31 день
     * @param month 1-12 месяц
     * @param year 1900-2100 год
     * @security вызывающий должен иметь право MODIFY_PRORUMBLE, дата указанная
     * в деталях должна быть сегоднящней или в будущем
     */
    @TransactionAttribute(TransactionAttributeType.REQUIRED)    
    @Override
    public void removeProrumble(int collid, int day, int month, int year) throws ClipsServerException {
        checkCommandAccessibility(COMMAND_MODIFY);
        if(day < 1 || day > 31
                || month < 1 || month > 12
                || year < 1900 || year > 2100) {
            throw new IllegalArgumentException("Date dd.mm.yyyy:"
                    + day + ":" + month + ":" + year);
        }
        for(Prorumble pro:getProrumbleList(day, month, year, collid)) {
            removeEntity(pro);
        }
    }


    /**
     *
     * @param day
     * @param month
     * @param year
     * @param collid
     * @return
     * @throws framework.generic.ClipsServerException
     */
    private List<Prorumble> getProrumbleList(int day, int month, int year, int collid) throws ClipsServerException {
        Calendar begin = getCalendar(day, month, year);
        checkIsNotInThePast(begin);

        Calendar end = (Calendar) begin.clone();
        end.add(Calendar.DAY_OF_MONTH, 1);

        Field[] f = {
            new Field("collaborator", findEntity(Collaborator.class, collid)),
            new Field("day", begin.getTime(), Field.OPERATOR_EQUAL_OR_MORE),
            new Field("day", end.getTime(), Field.OPERATOR_LESS)
        };
        return findEntityWhat(null, Prorumble.class, f, "");
    }
   
    /**
     *
     * @param day 1-31
     * @param month 1-12
     * @param year 2007-
     * @return
     */
    private static Calendar getCalendar(int day, int month, int year) {
        Calendar cal = GregorianCalendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.DAY_OF_MONTH, 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;
    }
}
TOP

Related Classes of beans.shedule.prorumble.SheduleProrumbleBean

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.