Package beans.shedule.week

Source Code of beans.shedule.week.SheduleWeekBean

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

package beans.shedule.week;

import framework.beans.SecuredBean;
import framework.beans.security.BeanRights;
import framework.generic.ClipsServerException;
import java.util.ArrayList;
import java.util.Iterator;
import javax.ejb.Stateful;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import beans.UserRightsSet;
import beans.user.collaborator.entities.Collaborator;
import java.util.HashSet;
import java.util.List;

/**
* Бин для управления еженедельным расписанием клиники
* @security ok
* @author axe
*/
@Stateful(mappedName="clips-beans/SheduleWeekBean")
public class SheduleWeekBean extends SecuredBean
        implements SheduleWeekBeanRemote {

    public static int COMMAND_MODIFY = 0;   
   
    @Override
    protected void initBeanRights() {
        int[] r = new int[1];
        r[COMMAND_MODIFY] = RightPresence(UserRightsSet.MODIFY_SHEDULE_WEEK.id);
        rights = new BeanRights(r);
    }
   
    /**
     * Возвращает информацию о днях недели,
     * дублирующиеся данные (строки с одинаковым индексом дня) удаляются.
     * @return SheduleWeekDetails - данные по еженедельному расписанию клиники
   * @throws ClipsServerException
   * @security без ограничений
     */
    @Override
    public List<DayShift> getDetails() throws ClipsServerException {
        Collaborator collab = findEntity(Collaborator.class, getCollaboratorId());
        Iterator<SheduleWeek> list = findEntityList(SheduleWeek.class, "lpu", collab.getLpu()).iterator();
        ArrayList<DayShift> result = new ArrayList<DayShift>();
        for(int i=0; i<7; i++) {
            result.add(null);
        }
        while(list.hasNext()) {
           SheduleWeek swp = list.next();
           Integer dayIndex = swp.getDayIndex();
           if(dayIndex<0 || dayIndex>6) {
               throw new ClipsServerException("Некорректные данные о недельном расписании в БД");
           }
           if(result.get(dayIndex) != null) {
               manager.remove(swp);
           } else {
               TimeOffset shiftBegin = new TimeOffset(swp.getBegin());
               TimeOffset shiftEnd = new TimeOffset(swp.getEnd());
               DayShift dayShift = new DayShift(shiftBegin, shiftEnd);
               result.set(dayIndex, dayShift);
           }
        }

        //add missing days
        for(int i=0; i<7; i++) {
            DayShift dayShift = result.get(i);
            if(dayShift == null) {
                dayShift = new DayShift();
                result.set(i, dayShift);

                SheduleWeek swp = new SheduleWeek();
                swp.setDayIndex(i);
                swp.setBegin(0);
                swp.setEnd(0);
                swp.setLpu(collab.getLpu());
                manager.persist(swp);
            }
        }
        return result;
    }

    /**
     * Назначает время работы клиники на заданный день недели
     * @param dayOfWeek день недели (константы java)
     * @param timeBegin время начала работы, количество минут с начала суток
     * @param timeEnd время окончания работы, количество минут с начала суток
     * @security требуется право MODIFY_SHEDULE_WEEK
     */
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    @Override
    public void setTime(int dayOfWeek, TimeOffset timeBegin, TimeOffset timeEnd)
            throws ClipsServerException {
        if(dayOfWeek <0 || dayOfWeek >6) {
            throw new IllegalArgumentException("Day of week = " + dayOfWeek);
        } else if (timeBegin.compareTo(timeEnd) > 0) {
            throw new IllegalArgumentException("TimeEnd < TimeBegin ("
                    + timeEnd + " < " + timeBegin + ")");
        }
       
        checkCommandAccessibility(COMMAND_MODIFY);
       
        Collaborator collab = findEntity(Collaborator.class, getCollaboratorId());
        SheduleWeek swp = null;
        Field f[] = {
            new Field("dayIndex", dayOfWeek),
            new Field("lpu", collab.getLpu()),
        };
        Iterator<SheduleWeek>  list = findEntityList(SheduleWeek.class, f).iterator();
        //delete dublicates
        if(list.hasNext()) {
            swp = list.next();
            while(list.hasNext()) {
                SheduleWeek week = list.next();
                manager.remove(week);
            }
        }

        if(swp == null) {
            swp = new SheduleWeek();
            swp.setDayIndex(dayOfWeek);
            swp.setBegin(timeBegin.getRaw());
            swp.setEnd(timeEnd.getRaw());
            swp.setLpu(collab.getLpu());
            manager.persist(swp);
        } else {
            swp.setBegin(timeBegin.getRaw());
            swp.setEnd(timeEnd.getRaw());
            swp.setLpu(collab.getLpu());
            manager.merge(swp);
        }
    }
}
TOP

Related Classes of beans.shedule.week.SheduleWeekBean

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.