package se.idega.idegaweb.commune.adulteducation.accounting.business; import java.rmi.RemoteException; import java.sql.Date; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.FinderException; import se.idega.idegaweb.commune.accounting.business.AccountingUtil; import se.idega.idegaweb.commune.accounting.export.data.ExportDataMapping; import se.idega.idegaweb.commune.accounting.invoice.business.BillingThread; import se.idega.idegaweb.commune.accounting.invoice.business.PlacementTimes; import se.idega.idegaweb.commune.accounting.invoice.data.InvoiceRecord; import se.idega.idegaweb.commune.accounting.invoice.data.InvoiceRecordHome; import se.idega.idegaweb.commune.accounting.invoice.data.PaymentRecord; import se.idega.idegaweb.commune.accounting.posting.business.PostingException; import se.idega.idegaweb.commune.accounting.regulations.business.MissingConditionTypeException; import se.idega.idegaweb.commune.accounting.regulations.business.MissingFlowTypeException; import se.idega.idegaweb.commune.accounting.regulations.business.MissingRegSpecTypeException; import se.idega.idegaweb.commune.accounting.regulations.business.PaymentFlowConstant; import se.idega.idegaweb.commune.accounting.regulations.business.RegSpecConstant; import se.idega.idegaweb.commune.accounting.regulations.business.RegulationException; import se.idega.idegaweb.commune.accounting.regulations.business.RegulationsBusiness; import se.idega.idegaweb.commune.accounting.regulations.business.RuleTypeConstant; import se.idega.idegaweb.commune.accounting.regulations.business.TooManyRegulationsException; import se.idega.idegaweb.commune.accounting.regulations.data.ConditionParameter; import se.idega.idegaweb.commune.accounting.regulations.data.PostingDetail; import se.idega.idegaweb.commune.accounting.regulations.data.RegulationSpecType; import se.idega.idegaweb.commune.accounting.school.data.Provider; import se.idega.idegaweb.commune.adulteducation.accounting.data.BatchParameters; import se.idega.idegaweb.commune.adulteducation.accounting.data.BatchParametersHome; import se.idega.idegaweb.commune.adulteducation.business.AdultEducationBusiness; import se.idega.idegaweb.commune.adulteducation.data.AdultEducationCourse; import se.idega.util.ErrorLogger; import com.idega.block.school.data.School; import com.idega.block.school.data.SchoolCategory; import com.idega.block.school.data.SchoolCategoryHome; import com.idega.block.school.data.SchoolClass; import com.idega.block.school.data.SchoolClassMember; import com.idega.block.school.data.SchoolClassMemberGrade; import com.idega.block.school.data.SchoolClassMemberGradeHome; import com.idega.block.school.data.SchoolClassMemberHome; import com.idega.block.school.data.SchoolStudyPath; import com.idega.block.school.data.SchoolType; import com.idega.business.IBOLookup; import com.idega.business.IBOLookupException; import com.idega.business.IBORuntimeException; import com.idega.data.IDOException; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.idegaweb.IWBundle; import com.idega.presentation.IWContext; import com.idega.util.IWTimestamp; public abstract class PaymentThreadAdultEducation extends BillingThread { protected BatchParameters parameters = null; protected SchoolType schoolType = null; protected IWTimestamp periodFrom = null; protected IWTimestamp periodTo = null; private static String IW_BUNDLE_IDENTIFIER = "se.idega.idegaweb.commune.adulteducation"; private boolean setVUXGradePayment = false; private boolean setVUXPayment = false; /* private int days = 0; private IWTimestamp periodStartCheck = null; private IWTimestamp periodEndCheck = null;*/ public PaymentThreadAdultEducation(Date month, IWContext iwc) { super(month, iwc); } public PaymentThreadAdultEducation(Date month, IWContext iwc, School school, boolean testRun) { super(month, iwc, school, testRun); } protected void setStudyPath(SchoolClassMember schoolClassMember, ArrayList conditions) { } public IWBundle getBundle() { return iwc.getIWMainApplication().getBundle(IW_BUNDLE_IDENTIFIER); } protected SchoolCategoryHome getSchoolCategoryHome() throws RemoteException { return (SchoolCategoryHome) IDOLookup.getHome(SchoolCategory.class); } // Common stuff for the batches protected void placements() { RegulationsBusiness regBus = null; Collection placements = null; try { regBus = getRegulationsBusiness(); placements = getPlacements(); } catch (RemoteException e1) { e1.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } // Go through all placements Iterator i = placements.iterator(); while (i.hasNext()) { SchoolClassMember member = (SchoolClassMember) i.next(); if (getInvoiceRecordCountForMemberWithVUXGradePayment(member) == 0) { Provider provider = null; try { provider = new Provider(Integer.parseInt(member .getSchoolClass().getSchool().getPrimaryKey() .toString())); createPaymentForSchoolClassMember(regBus, provider, member); } catch (NullPointerException e) { // throw new SchoolMissingVitalDataException(""); e.printStackTrace(); } catch (EJBException e) { e.printStackTrace(); } catch (PostingException e) { //createn e.printStackTrace(); } catch (RegulationException e) { e.printStackTrace(); } catch (MissingFlowTypeException e) { e.printStackTrace(); } catch (MissingConditionTypeException e) { e.printStackTrace(); } catch (MissingRegSpecTypeException e) { e.printStackTrace(); } catch (TooManyRegulationsException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } catch (CreateException e) { e.printStackTrace(); } } if (!running) { return; } } /* * catch (RemoteException e) { e.printStackTrace(); if (errorRelated != * null) { errorRelated.append(e); createNewErrorMessage(errorRelated, * getLocalizedString( "invoice.RemoteException", "Remote Exception")); } * else { createNewErrorMessage(getLocalizedString( * "invoice.PaymentSchool", "Payment School"), * getLocalizedString("invoice.RemoteException", "Remote Exception")); } } * catch (FinderException e) { e.printStackTrace(); if (errorRelated != * null) { createNewErrorMessage(errorRelated, getLocalizedString( * "invoice.Severe_CouldNotFindSchoolCategory", "Severe. Could not find * school category")); } else { * createNewErrorMessage(getLocalizedString( "invoice.PaymentSchool", * "Payment School"), getLocalizedString( * "invoice.Severe_CouldNotFindSchoolCategory", "Severe Could not find * school category")); } } catch (EJBException e) { e.printStackTrace(); * if (errorRelated != null) { createNewErrorMessage(errorRelated, * getLocalizedString( "invoice.Severe_CouldNotFindHomeCommune", "Severe * Could not find home commune")); } else { * createNewErrorMessage(getLocalizedString( "invoice.PaymentSchool", * "Payment School"), getLocalizedString( * "invoice.Severe_CouldNotFindHomeCommune", "Severe Could not find home * commune")); } } catch (IDOException e) { e.printStackTrace(); if * (errorRelated != null) { errorRelated.append(e); * createNewErrorMessage(errorRelated, getLocalizedString( * "invoice.Severe_IDOException", "Severe IDO Exception")); } else { * createNewErrorMessage(getLocalizedString( "invoice.PaymentSchool", * "Payment School"), getLocalizedString("invoice.Severe_IDOException", * "Severe IDO Exception")); } } */ } protected Collection getPlacements() throws RemoteException, FinderException { IWTimestamp theDayAfterPeriodTo = new IWTimestamp(periodTo); theDayAfterPeriodTo.addDays(1); return getSchoolClassMemberHome() .findPlacementsBySchoolTypeAndRegisterDateAndGradeInPeriod( schoolType, periodFrom, theDayAfterPeriodTo); } protected void createPaymentForSchoolClassMember( RegulationsBusiness regBus, Provider provider, SchoolClassMember member) throws FinderException, EJBException, PostingException, CreateException, RegulationException, MissingFlowTypeException, MissingConditionTypeException, MissingRegSpecTypeException, TooManyRegulationsException, RemoteException { errorRelated = new ErrorLogger(); errorRelated.append(getLocalizedString("adult.SchoolClassMember", "SchoolClassMember") + ":" + member.getPrimaryKey()); if (null != member.getStudent()) { errorRelated.append(getLocalizedString("adult.Student", "Student") + ":" + member.getStudent().getName() + "; " + getLocalizedString("adult.PersonalID", "PersonalID") + ":" + member.getStudent().getPersonalID()); } // final boolean placementIsInValidGroup = // schoolClassMember.getSchoolClass().getValid(); // final boolean comp_by_agreement = // schoolClassMember.getHasCompensationByAgreement(); // if (placementIsInValidGroup && !comp_by_agreement) { AdultEducationCourse course = null; SchoolStudyPath path = null; SchoolClass group = member.getSchoolClass(); if (group.getCode() != null && !"".equals(group.getCode())) { try { course = getAdultEducationBusiness().getCourse( group.getSchoolSeason().getPrimaryKey(), group.getCode()); path = course.getStudyPath(); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } } ArrayList conditions = getConditions(member, path); School school = member.getSchoolClass().getSchool(); errorRelated.append(getLocalizedString("adult.Date", "Date") + ":" + calculationDate.toString()); // Get the check PostingDetail postingDetail = getCheck(regBus, conditions, member); System.out.println("check = " + postingDetail.toString()); RegulationSpecType regSpecType = getRegulationSpecTypeHome() .findByRegulationSpecType(postingDetail.getRuleSpecType()); System.out.println("regSpecType = " + regSpecType.toString()); String[] postings = getPostingStrings(provider, member, regSpecType); System.out.println("postings = " + postings.toString()); System.out.println("Member = " + member.getStudent().getName()); System.out.println("Member id = " + member.getPrimaryKey().toString()); setVUXGradePayment = false; setVUXPayment = false; float newAmount = getCheckAmount(postingDetail.getAmount(), member, course); System.out.println("new amount = " + newAmount); postingDetail.setAmount(newAmount); if (newAmount > 0.0f) { final PaymentRecord record = createPaymentRecord(postingDetail, postings[0], postings[1], 1.0f, school); System.out.println("paymentrecord = " + record.getPrimaryKey().toString()); createVATPaymentRecord(record, postingDetail, 1.0f, school, member .getSchoolType(), member.getSchoolYear()); InvoiceRecord iRec = createInvoiceRecord(record, member, postingDetail, null); if (setVUXGradePayment || setVUXPayment) { if (setVUXGradePayment) { iRec.setVUXGradePayment(true); } if (setVUXPayment) { iRec.setVUXPayment(true); } iRec.store(); } } } protected InvoiceRecord createInvoiceRecord( final PaymentRecord paymentRecord, final SchoolClassMember placement, final PostingDetail postingDetail, PlacementTimes checkPeriod) throws RemoteException, CreateException { return createInvoiceRecord(paymentRecord, placement, postingDetail, checkPeriod, periodFrom.getDate(), periodTo.getDate()); } protected InvoiceRecord createInvoiceRecord( final PaymentRecord paymentRecord, final SchoolClassMember placement, final PostingDetail postingDetail, PlacementTimes checkPeriod, final Date startPlacementDate, final Date endPlacementDate) throws RemoteException, CreateException { return getInvoiceBusiness().createInvoiceRecord(paymentRecord, placement, postingDetail, checkPeriod, startPlacementDate, endPlacementDate, BATCH_TEXT); } private float getCheckAmount(float originalAmount, SchoolClassMember member, AdultEducationCourse course) { if (course.getLength() > 5) { int days = getDays(member, course); int weeks = days / 7; if (weeks < parameters.getWeekLimit()) { return 0.0f; } else { if (member.getSchoolClass().getSchoolSeasonId() != parameters .getFlexPeriodId()) { return getNonFlexiblePayment(originalAmount, member, course); } else { return getFlexiblePayment(originalAmount, member, course); } } } else { if (member.getRemovedDate() != null) { if (!isFirstGradeForMemberInPeriod(member)) { int nop = getInvoiceRecordCountForMemberWithVUXPayment(member); if (nop == 0) { setVUXPayment = true; return originalAmount * (parameters.getShortPercentage() / 100.0f); } else { return 0.0f; } } else { setVUXGradePayment = true; setVUXPayment = true; if (getInvoiceRecordCountForMember(member) == 0) { return originalAmount; } else { return originalAmount * (parameters.getShortGradePercentage() / 100.0f); } } } else { return 0.0f; } } } private float getNonFlexiblePayment(float originalAmount, SchoolClassMember member, AdultEducationCourse course) { IWTimestamp removedStamp = null; if (member.getRemovedDate() != null) { removedStamp = new IWTimestamp(member.getRemovedDate()); } IWTimestamp courseStartStamp = new IWTimestamp(course.getStartDate()); IWTimestamp courseEndStamp = new IWTimestamp(course.getEndDate()); int courseDays = getDayDiff(courseStartStamp, courseEndStamp); float paymentPrDay = (originalAmount * (parameters.getLongPercentage() / 100.0f)) / courseDays; if (removedStamp == null) { if (courseEndStamp.isLaterThanOrEquals(periodFrom)) { if (getInvoiceRecordCountForMember(member) == 0) { if (courseEndStamp.isLaterThan(periodTo)) { return paymentPrDay * getDayDiff(courseStartStamp, periodTo); } else { setVUXPayment = true; return originalAmount * (parameters.getLongPercentage() / 100.0f); } } else { if (courseEndStamp.isLaterThan(periodTo)) { return paymentPrDay * getDayDiff(periodFrom, periodTo); } else { setVUXPayment = true; return paymentPrDay * getDayDiff(periodFrom, courseEndStamp); } } } else { return 0.0f; } } else { if (!isFirstGradeForMemberInPeriod(member)) { int nop = getInvoiceRecordCountForMemberWithVUXPayment(member); if (removedStamp.isLaterThanOrEquals(periodFrom) && nop == 0) { if (getInvoiceRecordCountForMember(member) == 0) { if (removedStamp.isEarlierThan(courseEndStamp)) { if (removedStamp.isEarlierThanOrEquals(periodTo)) { setVUXPayment = true; return paymentPrDay * getDayDiff(courseStartStamp, removedStamp); } else { return paymentPrDay * getDayDiff(courseStartStamp, periodTo); } } else { if (courseEndStamp.isEarlierThanOrEquals(periodTo)) { setVUXPayment = true; return originalAmount * (parameters.getLongPercentage() / 100.0f); } else { return paymentPrDay * getDayDiff(courseStartStamp, periodTo); } } } else { if (removedStamp.isEarlierThan(courseEndStamp)) { if (removedStamp.isEarlierThanOrEquals(periodTo)) { setVUXPayment = true; return paymentPrDay * getDayDiff(periodFrom, removedStamp); } else { return paymentPrDay * getDayDiff(periodFrom, periodTo); } } else { if (courseEndStamp.isEarlierThanOrEquals(periodTo)) { setVUXPayment = true; return paymentPrDay * getDayDiff(periodFrom, courseEndStamp); } else { return paymentPrDay * getDayDiff(periodFrom, periodTo); } } } } else { return 0.0f; } } else { setVUXPayment = true; setVUXGradePayment = true; if (getInvoiceRecordCountForMember(member) == 0) { return originalAmount; } else { if (courseEndStamp.isEarlierThanOrEquals(periodFrom)) { return originalAmount * (parameters.getLongGradePercentage() / 100.0f); } else { return paymentPrDay * getDayDiff(periodFrom, courseEndStamp) + originalAmount * (parameters.getLongGradePercentage() / 100.0f); } } } } } private int getDayDiff(IWTimestamp from, IWTimestamp to) { return AccountingUtil.getDayDiff(from, to) + 1; } private float getFlexiblePayment(float originalAmount, SchoolClassMember member, AdultEducationCourse course) { IWTimestamp registerStamp = new IWTimestamp(member.getRegisterDate()); IWTimestamp removedStamp = null; if (member.getRemovedDate() != null) { removedStamp = new IWTimestamp(member.getRemovedDate()); } int courseDays = course.getLength() * 7; float paymentPrDay = (originalAmount * (parameters.getLongPercentage() / 100.0f)) / courseDays; if (removedStamp == null) { int nop = getInvoiceRecordCountForMemberWithVUXPayment(member); if (nop == 0) { if (getInvoiceRecordCountForMember(member) == 0) { if (getDayDiff(registerStamp, periodTo) < courseDays) { return paymentPrDay * getDayDiff(registerStamp, periodTo); } else { setVUXPayment = true; return originalAmount * (parameters.getLongPercentage() / 100.0f); } } else { if (getDayDiff(registerStamp, periodTo) < courseDays) { return paymentPrDay * getDayDiff(periodFrom, periodTo); } else { setVUXPayment = true; return paymentPrDay * (courseDays - getDayDiff(registerStamp, periodFrom) + 1); } } } else { return 0.0f; } } else { if (!isFirstGradeForMemberInPeriod(member)) { if (removedStamp.isLaterThanOrEquals(periodFrom) && getInvoiceRecordCountForMemberWithVUXPayment(member) == 0) { if (getInvoiceRecordCountForMember(member) == 0) { if (getDayDiff(registerStamp, removedStamp) >= courseDays) { if (removedStamp.isEarlierThanOrEquals(periodTo)) { setVUXPayment = true; return originalAmount * (parameters.getLongPercentage() / 100.0f); } else { if (getDayDiff(registerStamp, periodTo) < courseDays) { return paymentPrDay * getDayDiff(registerStamp, periodTo); } else { setVUXPayment = true; return originalAmount * (parameters.getLongPercentage() / 100.0f); } } } else { if (removedStamp.isEarlierThanOrEquals(periodTo)) { setVUXPayment = true; return paymentPrDay * getDayDiff(registerStamp, removedStamp); } else { return paymentPrDay * getDayDiff(registerStamp, periodTo); } } } else { if (getDayDiff(registerStamp, removedStamp) >= courseDays) { if (removedStamp.isEarlierThanOrEquals(periodTo)) { setVUXPayment = true; return paymentPrDay * (courseDays - getDayDiff(registerStamp, periodFrom ) + 1); } else { if (getDayDiff(registerStamp, periodTo) < courseDays) { return paymentPrDay * getDayDiff(periodFrom, periodTo); } else { setVUXPayment = true; return paymentPrDay * (courseDays - getDayDiff( registerStamp, periodFrom) + 1); } } } else { if (removedStamp.isEarlierThanOrEquals(periodTo)) { setVUXPayment = true; return paymentPrDay * getDayDiff(periodFrom, removedStamp); } else { return paymentPrDay * getDayDiff(periodFrom, periodTo); } } } } else { return 0.0f; } } else { setVUXPayment = true; setVUXGradePayment = true; if (getInvoiceRecordCountForMember(member) == 0) { return originalAmount; } else { if (getDayDiff(registerStamp, periodFrom) >= courseDays) { return originalAmount * (parameters.getLongGradePercentage() / 100.0f); } else { return paymentPrDay * (courseDays - getDayDiff(registerStamp, periodFrom) + 1) + (originalAmount * (parameters .getLongGradePercentage() / 100.0f)); } } } } } private int getDays(SchoolClassMember member, AdultEducationCourse course) { int days = 0; IWTimestamp registerStamp = new IWTimestamp(member.getRegisterDate()); IWTimestamp removedStamp = null; if (member.getRemovedDate() != null) { removedStamp = new IWTimestamp(member.getRemovedDate()); } IWTimestamp courseEndStamp = new IWTimestamp(course.getEndDate()); if (removedStamp == null && member.getSchoolClass().getSchoolSeasonId() != parameters .getFlexPeriodId()) { if (courseEndStamp.isLaterThanOrEquals(periodTo)) { days = getDayDiff(registerStamp, periodTo); } else { days = getDayDiff(registerStamp, courseEndStamp); } } else if (removedStamp != null && member.getSchoolClass().getSchoolSeasonId() != parameters .getFlexPeriodId()) { if (removedStamp.isLaterThanOrEquals(periodTo)) { days = getDayDiff(registerStamp, periodTo); } else { days = getDayDiff(registerStamp, removedStamp); } } else if (removedStamp != null && member.getSchoolClass().getSchoolSeasonId() == parameters .getFlexPeriodId()) { if (removedStamp.isLaterThanOrEquals(periodTo)) { days = getDayDiff(registerStamp, periodTo); } else { days = getDayDiff(registerStamp, removedStamp); } } else if (removedStamp == null && member.getSchoolClass().getSchoolSeasonId() == parameters .getFlexPeriodId()) { days = getDayDiff(registerStamp, periodTo); } return days; } private boolean isFirstGradeForMemberInPeriod(SchoolClassMember member) { SchoolClassMemberGrade grade = getFirstGradeForMember(member); if (grade == null) { return false; } IWTimestamp creationStamp = new IWTimestamp(grade.getCreated()); return creationStamp.isBetween(periodFrom, periodTo); } private SchoolClassMemberGrade getFirstGradeForMember( SchoolClassMember member) { SchoolClassMemberGrade grade = null; try { grade = getSchoolClassMemberGradeHome() .findFirstGradeSetForStudent(member); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { } return grade; } private int getInvoiceRecordCountForMember(SchoolClassMember member) { int count = 0; try { count = getInvoiceRecordHome() .getNumberOfInvoicesForStudent(member); } catch (RemoteException e) { e.printStackTrace(); } catch (IDOException e) { e.printStackTrace(); } return count; } private int getInvoiceRecordCountForMemberWithVUXGradePayment( SchoolClassMember member) { int count = 0; try { count = getInvoiceRecordHome() .getNumberOfInvoicesForStudentWithVUXGradePayment(member); } catch (RemoteException e) { e.printStackTrace(); } catch (IDOException e) { e.printStackTrace(); } return count; } private int getInvoiceRecordCountForMemberWithVUXPayment( SchoolClassMember member) { int count = 0; try { count = getInvoiceRecordHome() .getNumberOfInvoicesForStudentWithVUXPayment(member); } catch (RemoteException e) { e.printStackTrace(); } catch (IDOException e) { e.printStackTrace(); } return count; } private ArrayList getConditions(SchoolClassMember schoolClassMember, SchoolStudyPath path) { ArrayList conditions = new ArrayList(); conditions.add(new ConditionParameter( RuleTypeConstant.CONDITION_ID_SCHOOL_TYPE, schoolClassMember .getSchoolType().getLocalizationKey())); conditions .add(new ConditionParameter( RuleTypeConstant.CONDITION_ID_STUDY_PATH, path .getPrimaryKey())); if (null != schoolClassMember) { errorRelated.append("School type:" + schoolClassMember.getSchoolType().getName()); } if (null != path) { errorRelated.append("Study path:" + path.getCode()); } setStudyPath(schoolClassMember, conditions); return conditions; } protected PostingDetail getCheck(RegulationsBusiness regBus, Collection conditions, SchoolClassMember placement) throws RegulationException, MissingFlowTypeException, MissingConditionTypeException, MissingRegSpecTypeException, TooManyRegulationsException, RemoteException { return regBus .getPostingDetailByOperationFlowPeriodConditionTypeRegSpecType( category.getCategory(), /* * The ID that selects * barnomsorg in the regulation */ PaymentFlowConstant.OUT, // The payment flow is out calculationDate, // Current date to select the // correct date // range RuleTypeConstant.DERIVED, // The conditiontype RegSpecConstant.CHECK, // The ruleSpecType shall be // Check conditions, // The conditions that need to fulfilled 0, // Sent in to be used for "Specialutrakning" null, // Contract not used here placement); // Sent in to be used for e.g. VAT } protected String[] getPostingStrings(Provider provider, SchoolClassMember schoolClassMember, RegulationSpecType regSpecType) throws PostingException, RemoteException, EJBException { return getPostingStrings(category, schoolClassMember.getSchoolType(), ((Integer) regSpecType.getPrimaryKey()).intValue(), provider, calculationDate, -1, -1); } protected String[] getPostingStrings(SchoolCategory category, SchoolType schoolType, int regSpecTypeId, Provider provider, Date calculationDate, int schoolYearId, int studyPathId) throws PostingException, RemoteException { if (studyPathId == -1) studyPathId = -1; return getPostingBusiness().getPostingStrings(category, schoolType, regSpecTypeId, provider, calculationDate, schoolYearId, -1, false); } /** * Creates all the invoice headers, invoice records, payment headers and * payment records for the Regular payments */ /* * protected void regularPayment() { PostingDetail postingDetail = null; * PlacementTimes placementTimes = null; Iterator regularPaymentIter = null; * School school = getSchool(); * * try { if (isTestRun() && school != null) { regularPaymentIter = * getRegularPaymentBusiness() .findRegularPaymentsForPeriodeAndSchool( * startPeriod.getDate(), endPeriod.getDate(), school).iterator(); } else { * regularPaymentIter = getRegularPaymentBusiness() * .findRegularPaymentsForPeriodeAndCategory( startPeriod.getDate(), * category).iterator(); } School regPaymentSchool; // Go through all the * regular payments while (regularPaymentIter.hasNext()) { * RegularPaymentEntry regularPaymentEntry = (RegularPaymentEntry) * regularPaymentIter .next(); errorRelated = new * ErrorLogger(getLocalizedString( "invoice.RegularPaymentEntryID", * "RegularPaymentEntry ID") + ":" + regularPaymentEntry.getPrimaryKey()); * errorRelated.append(getLocalizedString("invoice.Placing", "Placing") + * ":" + regularPaymentEntry.getPlacing()); * errorRelated.append(getLocalizedString("invoice.Amount", "Amount") + ":" + * regularPaymentEntry.getAmount()); * errorRelated.append(getLocalizedString("invoice.School", "School") + ":" + * regularPaymentEntry.getSchool()); postingDetail = new * PostingDetail(regularPaymentEntry); regPaymentSchool = * regularPaymentEntry.getSchool(); placementTimes = * calculateTime(regularPaymentEntry.getFrom(), * regularPaymentEntry.getTo()); try { PaymentRecord paymentRecord = * createPaymentRecord( postingDetail, regularPaymentEntry.getOwnPosting(), * regularPaymentEntry.getDoublePosting(), placementTimes.getMonths(), * regPaymentSchool, regularPaymentEntry.getNote()); * createVATPaymentRecord(paymentRecord, postingDetail, * placementTimes.getMonths(), regPaymentSchool, * regularPaymentEntry.getSchoolType(), null); User classMember = * regularPaymentEntry.getUser(); if (classMember != null) { try { * SchoolClassMember schoolClassMember = getSchoolClassMemberHome() * .findLatestByUser(classMember); createInvoiceRecord(paymentRecord, * schoolClassMember, postingDetail, placementTimes); } catch * (FinderException e) { createNewErrorMessage( errorRelated, * getLocalizedString( "invoice.schoolClassMemberNotFound", "The regular * invoice pointed to a user, but the accordingly school class member was * not found.")); } } } catch (IDOLookupException e) { * createNewErrorMessage(errorRelated, getLocalizedString( * "invoice.IDOLookup", "IDOLookup")); e.printStackTrace(); } catch * (CreateException e) { createNewErrorMessage(errorRelated, * getLocalizedString( "invoice.Create", "Create")); e.printStackTrace(); } * if (!running) { return; } } } catch (FinderException e) { * e.printStackTrace(); if (postingDetail != null) { * createNewErrorMessage(postingDetail.getTerm(), "payment.DBSetupProblem"); } * else { createNewErrorMessage("payment.severeError", * "payment.DBSetupProblem"); } } catch (IDOLookupException e) { * createNewErrorMessage("payment.severeError", "payment.DBSetupProblem"); * e.printStackTrace(); } catch (RemoteException e) { * createNewErrorMessage("payment.severeError", "payment.DBSetupProblem"); * e.printStackTrace(); } } */ protected ExportDataMapping getCategoryPosting() throws FinderException, IDOLookupException, EJBException { return (ExportDataMapping) IDOLookup.getHome(ExportDataMapping.class) .findByPrimaryKeyIDO(category.getPrimaryKey()); } protected BatchParameters getBatchParameters(int schoolTypeId) throws FinderException, IDOLookupException, EJBException { return ((BatchParametersHome) IDOLookup.getHome(BatchParameters.class)) .findBySchoolTypeId(schoolTypeId); } protected SchoolType getSchoolType(int schoolTypeId) throws FinderException, IDOLookupException, EJBException { return (SchoolType) IDOLookup.getHome(SchoolType.class) .findByPrimaryKeyIDO(new Integer(schoolTypeId)); } protected SchoolClassMemberHome getSchoolClassMemberHome() throws RemoteException { return (SchoolClassMemberHome) IDOLookup .getHome(SchoolClassMember.class); } protected SchoolClassMemberGradeHome getSchoolClassMemberGradeHome() throws RemoteException { return (SchoolClassMemberGradeHome) IDOLookup .getHome(SchoolClassMemberGrade.class); } protected InvoiceRecordHome getInvoiceRecordHome() throws RemoteException { return (InvoiceRecordHome) IDOLookup.getHome(InvoiceRecord.class); } private AdultEducationBusiness getAdultEducationBusiness() { try { return (AdultEducationBusiness) IBOLookup.getServiceInstance(iwc, AdultEducationBusiness.class); } catch (IBOLookupException ile) { throw new IBORuntimeException(ile); } } }