Package clips.delegate.shedule

Source Code of clips.delegate.shedule.SheduleHelper

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clips.delegate.shedule;

import TimeTable.Day;
import TimeTable.DayOfWeek;
import beans.shedule.week.TimeOffset;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.IteratorEditable;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import clips.delegate.shedule.exception.SheduleExceptionData;
import clips.delegate.shedule.exception.SheduleExceptionLocal;
import clips.delegate.shedule.holidays.SheduleHolidayData;
import clips.delegate.shedule.holidays.SheduleHolidayLocal;
import clips.delegate.shedule.individual.SheduleIndividualData;
import clips.delegate.shedule.individual.SheduleIndividualLocal;
import clips.delegate.shedule.individual.WeekIndex;
import clips.delegate.shedule.prorumble.SheduleProrumbleData;
import clips.delegate.shedule.prorumble.SheduleProrumbleLocal;
import clips.delegate.shedule.week.SheduleWeekLocal;
import java.util.LinkedList;
import java.util.List;

/**
*
* @author axe
*/
public class SheduleHelper {

    private final SheduleWeekLocal swl = SheduleWeekLocal.getInstance();
    private final SheduleExceptionLocal sel = SheduleExceptionLocal.getInstance();
    private final SheduleHolidayLocal shl = SheduleHolidayLocal.getInstance();
    private final SheduleProrumbleLocal spl;
    private final SheduleIndividualLocal sil;

    public SheduleHelper(SheduleProrumbleLocal spl, SheduleIndividualLocal sil) throws ClipsException {
        this.spl = spl;
        this.sil = sil;
    }

    public SheduledDay getSheduledDay(Day day) throws ClipsException {
        SheduledDay res = new SheduledDay();
        //week
        DayOfWeek dow = day.getDayOfWeek();
        TimeOffset timeBegin = swl.getTimeBegin(dow);
        res.setClinicShiftBegin(timeBegin);
        res.setClinicShiftDuration(swl.getTimeEnd(dow).getRaw() - timeBegin.getRaw());
        //Возможно выходной
        if (res.getClinicShiftDuration() == 0) {
            res.setWorking(false);
            res.setDescription("Выходной");
            return res;
        }
        //prorumble
        SheduleProrumbleData prorumble = spl.getProrumble(day);
        if (prorumble != null) {
            res.setWorking(false);
            res.setDescription(prorumble.toString());
            res.setProrumbleItem(prorumble.getType());
            return res;
        }

        //Получаем расписание врача за текущую неделю (только работы указанного типа)
        //если нет работ - значит врач работает по шаблону, идем дальше
        WeekIndex weekIndex = new WeekIndex(day);
        IteratorEditable<SheduleIndividualData> exWorks = sil.daySelector(weekIndex, dow);
        if (exWorks.hasNext()) {
            res.setWorking(true);
            res.setDescription("Исключение");
            //если есть работы используем их
            List<SheduleIndividualData> lst = new LinkedList<SheduleIndividualData>();
            while (exWorks.hasNext()) {
                lst.add(exWorks.next());
            }
            res.setData(lst);
            return res;
        }

        //5. Получаем исключения работы поликлинники за текущую неделю.
        //если исключения есть, и они указывают что день нерабочий, отмечаем день как закрытый
        SheduleExceptionData exception = sel.getException(day.getCalendar().getTime());
        if (exception != null && !exception.isWorking()) {
            res.setWorking(false);
            res.setDescription(exception.getDescription());
            return res;
        }

        //6. Если исключений нет, получаем праздники за указанную неделю
        //если в этот день праздник, отмечаем день как закрытый
        if (exception == null) {
            SheduleHolidayData holiday = shl.getHoliday(day.getDay(), day.getMonth() + 1);
            if (holiday != null) {
                res.setWorking(false);
                res.setDescription(holiday.getDescription());
                return res;
            }
        }

        //7. Врач работает по шаблону. получаем шаблон расписания для данного врача
        res.setWorking(true);
        res.setByPlan(true);
        WeekIndex planWeekIndex = new WeekIndex(weekIndex.getIndex() % sil.getWeekCount());
        IteratorEditable<SheduleIndividualData> plWorks = sil.daySelector(planWeekIndex, dow);
        if (plWorks.hasNext()) {
            //если есть работы используем их
            List<SheduleIndividualData> lst = new LinkedList<SheduleIndividualData>();
            while (plWorks.hasNext()) {
                lst.add(plWorks.next());
            }
            res.setData(lst);
        }
        return res;
    }
}
TOP

Related Classes of clips.delegate.shedule.SheduleHelper

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.