package pt.utl.ist.scripts.runOnce.candidacy; import java.util.Set; import net.sourceforge.fenixedu.domain.accounting.Event; import net.sourceforge.fenixedu.domain.accounting.EventType; import net.sourceforge.fenixedu.domain.accounting.PaymentCode; import net.sourceforge.fenixedu.domain.accounting.PaymentCodeType; import net.sourceforge.fenixedu.domain.accounting.ResidenceEvent; import net.sourceforge.fenixedu.domain.accounting.paymentCodes.AccountingEventPaymentCode; import net.sourceforge.fenixedu.util.Month; import org.joda.time.LocalDate; import org.joda.time.YearMonthDay; import pt.utl.ist.scripts.commons.AtomicScript; public class CancelUnusedPaymentCodes extends AtomicScript { @Override protected void run() throws Exception { int count = 0; LocalDate original = new LocalDate(2013, 07, 5); LocalDate created = new LocalDate(2013, 07, 8); YearMonthDay start = new YearMonthDay(2013, 07, 8); nextPaymentCode: for (PaymentCode paymentCode : rootDomainObject.getPaymentCodesSet()) { if (paymentCode instanceof AccountingEventPaymentCode) { if (paymentCode.getType().equals(PaymentCodeType.RESIDENCE_FEE) && paymentCode.getWhenCreated().toLocalDate().isEqual(created) && paymentCode.getStartDate().isEqual(start) && paymentCode.isNew()) { Set events = paymentCode.getPerson().getEventsByEventType(EventType.RESIDENCE_PAYMENT); for (Event event : events) { ResidenceEvent residenceEvent = (ResidenceEvent) event; if (residenceEvent.getResidenceMonth().getMonth().equals(Month.JULY) && residenceEvent.getWhenOccured().toLocalDate().equals(original)) { if (event.getPaymentCodesSet().size() == 2) { for (PaymentCode eventPaymentCode : event.getAllPaymentCodes()) { if (eventPaymentCode != paymentCode && !eventPaymentCode.isCancelled()) { paymentCode.cancel(); count++; continue nextPaymentCode; } } } } } } } } System.out.println(count + " canceled payment codes"); } public static final void main(String[] args) { processWriteTransaction(new CancelUnusedPaymentCodes()); } }