package entity.qms; import io.lamma.LammaConversion; import io.lamma.Recurrence; import op.OPDE; import op.tools.SYSCalendar; import op.tools.SYSConst; import op.tools.SYSTools; import org.joda.time.LocalDate; import org.joda.time.MutableDateTime; import javax.persistence.EntityManager; import javax.persistence.Query; import javax.swing.*; import java.text.DateFormat; /** * Created by tloehr on 17.06.14. */ public class QmsschedTools { public static final byte STATE_ACTIVE = 0; public static final byte STATE_INACTIVE = 1; public static final byte STATE_ARCHIVE = 2; public static String getAsHTML(Qmssched qmssched) { String result = SYSConst.html_paragraph(SYSConst.html_bold(qmssched.getMeasure())); result += getRepeatPattern(qmssched); // result += SYSConst.html_paragraph(qmssched.hasTime() ? DateFormat.getTimeInstance(DateFormat.SHORT).format(qmssched.getTime()) + " " + SYSTools.xx("misc.msg.Time.short") + ", " + wdh : wdh); if (qmssched.getStation() != null) { result += SYSConst.html_paragraph(SYSTools.xx("misc.msg.station") + ": " + qmssched.getStation().getName() + ", " + qmssched.getStation().getHome().getName()); } else if (qmssched.getHome() != null) { result += SYSConst.html_paragraph(SYSTools.xx("misc.msg.home") + ": " + qmssched.getHome().getName()); } result += SYSTools.catchNull(qmssched.getText(), "<p><i>", "</i></p>"); return result; } public static String getRepeatPattern(Qmssched qmssched) { String result = ""; if (qmssched.isDaily()) { if (qmssched.getDaily() > 1) { result += SYSTools.xx("misc.msg.every") + " " + qmssched.getDaily() + " " + SYSTools.xx("misc.msg.Days2"); } else { result += SYSTools.xx("misc.msg.everyDay"); } } else if (qmssched.isWeekly()) { if (qmssched.getWeekly() == 1) { result += result += SYSTools.xx("misc.msg.everyWeek"); } else { result += SYSTools.xx("misc.msg.every") + " " + qmssched.getWeekly() + " " + SYSTools.xx("misc.msg.weeks"); } MutableDateTime mdt = new MutableDateTime(); mdt.setDayOfWeek(qmssched.getWeekday()); result += ", " + SYSTools.xx("misc.msg.every4") + " " + mdt.dayOfWeek().getAsText(); } else if (qmssched.isMonthly()) { if (qmssched.getMonthly() == 1) { result += SYSTools.xx("misc.msg.everyMonth") + ", "; } else { result += SYSTools.xx("misc.msg.every") + " " + qmssched.getMonthly() + " " + SYSTools.xx("misc.msg.months") + ", "; } if (qmssched.getWeekday() > 0) { // with a nth weekday in that month MutableDateTime mdt = new MutableDateTime(); mdt.setDayOfWeek(qmssched.getWeekday()); result += SYSTools.xx("misc.msg.every4") + " " + qmssched.getDayinmonth() + ". " + mdt.dayOfWeek().getAsText(); } else { result += SYSTools.xx("misc.msg.every4") + " " + qmssched.getDayinmonth() + ". " + SYSTools.xx("misc.msg.day"); } } else if (qmssched.isYearly()) { if (qmssched.getYearly() == 1) { result += SYSTools.xx("misc.msg.everyYear") + ", "; } else { result += SYSTools.xx("misc.msg.every") + " " + qmssched.getYearly() + " " + SYSTools.xx("misc.msg.Years") + ", "; } MutableDateTime mdt = new MutableDateTime(); mdt.setDayOfMonth(qmssched.getDayinmonth()); mdt.setMonthOfYear(qmssched.getMonthinyear()); result += SYSTools.xx("misc.msg.every4") + " " + qmssched.getDayinmonth() + ". " + mdt.monthOfYear().getAsText(); } else { result = ""; } LocalDate ldatum = new LocalDate(qmssched.getStartingOn()); LocalDate today = new LocalDate(); if (ldatum.compareTo(today) > 0) { // Die erste Ausführung liegt in der Zukunft result += "<br/>" + SYSTools.xx("opde.controlling.qms.dlgqmsplan.pnlschedule.startingon") + ": " + DateFormat.getDateInstance().format(qmssched.getStartingOn()); } return result; } /** * takes the recurrence pattern inside a qmssched and creates a list of recurrences for a lamma sequence generator. * * @param qmssched * @return */ public static Recurrence getRecurrence(Qmssched qmssched) { Recurrence recurrence = null; if (qmssched.isDaily()) { recurrence = LammaConversion.days(qmssched.getDaily()); } else if (qmssched.isWeekly()) { recurrence = LammaConversion.weeks( qmssched.getWeekly(), SYSCalendar.weeksdays[qmssched.getWeekday()]); } else if (qmssched.isMonthly()) { if (qmssched.getWeekday() > 0) { // with a nth weekday in that month recurrence = LammaConversion.months( qmssched.getMonthly(), LammaConversion.nthWeekdayOfMonth(qmssched.getDayinmonth(), SYSCalendar.weeksdays[qmssched.getWeekday()])); } else { // with a specific day in that month recurrence = LammaConversion.months( qmssched.getMonthly(), LammaConversion.nthDayOfMonth(qmssched.getDayinmonth())); } } else if (qmssched.isYearly()) { recurrence = LammaConversion.years( qmssched.getYearly(), LammaConversion.nthMonthOfYear(SYSCalendar.months[qmssched.getMonthinyear()], LammaConversion.nthDayOfMonth(qmssched.getDayinmonth()))); } return recurrence; } public static boolean isUnused(Qmssched qmssched) { boolean unused = true; for (Qms qms : qmssched.getQmsList()) { unused = qms.isOpen(); if (!unused) break; } return unused; } public static long getNumOpen(Qmssched qmssched) { long open = 0; EntityManager em = OPDE.createEM(); try { String jpql = " SELECT count(q) " + " FROM Qms q" + " WHERE q.qmssched = :qmssched AND q.state = :state "; Query query = em.createQuery(jpql); query.setParameter("state", QmsTools.STATE_OPEN); query.setParameter("qmssched", qmssched); open = (long) query.getSingleResult(); } catch (Exception se) { OPDE.fatal(se); } finally { em.close(); } // // for (Qms qms : qmssched.getQmsList()) { // if (qms.isOpen()) { // open++; // } // // } return open; } public static Icon getIcon(Qmssched qmssched) { Icon icon = null; int pastdue = 2; int due = 1; int worstCase = 0; for (Qms qms : qmssched.getQmsList()) { if (qms.isOpen()) { int thisCase = 0; if (qms.isPastDue()) { thisCase = pastdue; } if (qms.isDue()) { thisCase = due; } worstCase = Math.max(worstCase, thisCase); } } if (worstCase == pastdue) { icon = SYSConst.icon22ledRedOn; } else if (worstCase == due) { icon = SYSConst.icon22ledYellowOn; } return icon; } }