/** * Is standard Period closed for all Document Base Types * * @param ctx context for AD_Client * @param DateAcct accounting date * @return true if closed */ public static boolean isClosed(Ctx ctx, Timestamp DateAcct) { if (DateAcct == null) return false; MAcctSchema as = MClient.get(ctx, ctx.getAD_Client_ID()).getAcctSchema(); if (as.isAutoPeriodControl()) return !as.isAutoPeriodControlOpen(DateAcct); // Get all Calendars in line with Organizations MClientInfo cInfo = MClientInfo.get(ctx, ctx.getAD_Client_ID(), null); ArrayList<Integer> calendars = new ArrayList<Integer>(); MOrg[] orgs = MOrg.getOfClient(cInfo); for (MOrg org : orgs) { MOrgInfo info = MOrgInfo.get(ctx, org.getAD_Org_ID(), null); int C_Calendar_ID = info.getC_Calendar_ID(); if (C_Calendar_ID == 0) C_Calendar_ID = cInfo.getC_Calendar_ID(); if (!calendars.contains(C_Calendar_ID)) calendars.add(C_Calendar_ID); } // Should not happen if (calendars.size() == 0) throw new IllegalArgumentException("@NotFound@ @C_Calendar_ID@"); // For all Calendars get Periods for (int i = 0; i < calendars.size(); i++) { int C_Calendar_ID = calendars.get(i); MPeriod period = MPeriod.getOfCalendar(ctx, C_Calendar_ID, DateAcct); // Period not found if (period == null) return false; if (!period.isClosed()) return false; } return true; // closed } // isClosed