Search in sources :

Example 21 with Lease

use of org.estatio.module.lease.dom.Lease in project estatio by estatio.

the class Occupancy_Test method validateNewOccupancy_Fails_Test.

@Test
public void validateNewOccupancy_Fails_Test() {
    // given
    Lease lease = new Lease();
    LocalDate occStartDate = new LocalDate();
    // when
    Unit unit = new Unit() {

        @Override
        public boolean isActiveOn(final LocalDate date) {
            return false;
        }
    };
    // then
    assertThat(lease.validateNewOccupancy(occStartDate, unit)).isEqualTo("At the start date of the occupancy this unit is not available.");
}
Also used : Lease(org.estatio.module.lease.dom.Lease) Unit(org.estatio.module.asset.dom.Unit) LocalDate(org.joda.time.LocalDate) AbstractBeanPropertiesTest(org.incode.module.unittestsupport.dom.bean.AbstractBeanPropertiesTest) Test(org.junit.Test)

Example 22 with Lease

use of org.estatio.module.lease.dom.Lease in project estatio by estatio.

the class Occupancy_Test method validateNewOccupancy_Passes_Test.

@Test
public void validateNewOccupancy_Passes_Test() {
    // given
    Lease lease = new Lease();
    LocalDate occStartDate = new LocalDate();
    // when
    Unit unit = new Unit() {

        @Override
        public boolean isActiveOn(final LocalDate date) {
            return true;
        }
    };
    // then
    assertThat(lease.validateNewOccupancy(occStartDate, unit)).isNull();
}
Also used : Lease(org.estatio.module.lease.dom.Lease) Unit(org.estatio.module.asset.dom.Unit) LocalDate(org.joda.time.LocalDate) AbstractBeanPropertiesTest(org.incode.module.unittestsupport.dom.bean.AbstractBeanPropertiesTest) Test(org.junit.Test)

Example 23 with Lease

use of org.estatio.module.lease.dom.Lease in project estatio by estatio.

the class LeaseStatusService_Test method setUp.

@Before
public void setUp() throws Exception {
    lease = new Lease();
    service = new LeaseStatusService();
    service.clockService = new ClockService() {

        @Override
        public LocalDate now() {
            // TODO Auto-generated method stub
            return new LocalDate(2014, 4, 1);
        }
    };
}
Also used : Lease(org.estatio.module.lease.dom.Lease) LeaseStatusService(org.estatio.module.lease.dom.status.LeaseStatusService) ClockService(org.apache.isis.applib.services.clock.ClockService) LocalDate(org.joda.time.LocalDate) Before(org.junit.Before)

Example 24 with Lease

use of org.estatio.module.lease.dom.Lease in project estatio by estatio.

the class InvoiceCalculationService method calculateAndInvoice.

@Programmatic
public String calculateAndInvoice(InvoiceCalculationParameters parameters) {
    String lastInteractionId = null;
    invoiceForLeaseRepository.removeRuns(parameters);
    try {
        startInteraction(parameters.toString());
        final List<Lease> leases = parameters.leases();
        for (Lease lease : leases.size() == 0 ? leaseRepository.findLeasesByProperty(parameters.property()) : leases) {
            lease.verifyUntil(parameters.dueDateRange().endDateExcluding());
            if (lease.getStatus() != LeaseStatus.SUSPENDED) {
                SortedSet<LeaseItem> leaseItems = parameters.leaseItem() == null ? lease.getItems() : new TreeSet<>(Arrays.asList(parameters.leaseItem()));
                for (LeaseItem leaseItem : leaseItems) {
                    if (!leaseItem.getStatus().equals(LeaseItemStatus.SUSPENDED) && leaseItem.getInvoicedBy().equals(LeaseAgreementRoleTypeEnum.LANDLORD)) {
                        // TODO: We only filter the Landlords
                        if (parameters.leaseItemTypes() == null || parameters.leaseItemTypes().contains(leaseItem.getType())) {
                            SortedSet<LeaseTerm> leaseTerms = parameters.leaseTerm() == null ? leaseItem.getTerms() : new TreeSet<>(Arrays.asList(parameters.leaseTerm()));
                            for (LeaseTerm leaseTerm : leaseTerms) {
                                final List<CalculationResult> results;
                                results = calculateDueDateRange(leaseTerm, parameters);
                                createInvoiceItems(leaseTerm, parameters, results);
                            }
                        }
                    }
                }
            }
        }
    } finally {
        lastInteractionId = interactionId;
        endInteraction();
    }
    return lastInteractionId;
}
Also used : Lease(org.estatio.module.lease.dom.Lease) LeaseItem(org.estatio.module.lease.dom.LeaseItem) LeaseTerm(org.estatio.module.lease.dom.LeaseTerm) Programmatic(org.apache.isis.applib.annotation.Programmatic)

Example 25 with Lease

use of org.estatio.module.lease.dom.Lease in project estatio by estatio.

the class InvoiceItemForLeaseRepository method newInvoiceItem.

@Programmatic
public InvoiceItemForLease newInvoiceItem(final LeaseTerm leaseTerm, final LocalDateInterval interval, final LocalDateInterval calculationInterval, final LocalDateInterval effectiveInterval, final LocalDate dueDate, final String interactionId) {
    final Lease lease = leaseTerm.getLeaseItem().getLease();
    final InvoiceForLease invoice = invoiceRepository.findOrCreateMatchingInvoice(leaseTerm.getApplicationTenancy(), leaseTerm.getLeaseItem().getPaymentMethod(), lease, InvoiceStatus.NEW, dueDate, interactionId);
    final InvoiceItemForLease invoiceItem = newItem(invoice, dueDate);
    invoiceItem.setLeaseTerm(leaseTerm);
    invoiceItem.setStartDate(interval.startDate());
    invoiceItem.setEndDate(interval.endDate());
    invoiceItem.setEffectiveStartDate(effectiveInterval.startDate());
    invoiceItem.setEffectiveEndDate(effectiveInterval.endDate());
    invoiceItem.setCalculationStartDate(calculationInterval.startDate());
    invoiceItem.setCalculationEndDate(calculationInterval.endDate());
    // redundantly persist, these are immutable
    // assumes only one occupancy per lease...
    invoiceItem.setLease(lease);
    final Optional<Occupancy> occupancyIfAny = lease.primaryOccupancy();
    occupancyIfAny.ifPresent(occupancy -> {
        Unit unit = occupancy.getUnit();
        invoiceItem.setFixedAsset(unit);
    });
    persistIfNotAlready(invoiceItem);
    return invoiceItem;
}
Also used : Lease(org.estatio.module.lease.dom.Lease) Occupancy(org.estatio.module.lease.dom.occupancy.Occupancy) Unit(org.estatio.module.asset.dom.Unit) Programmatic(org.apache.isis.applib.annotation.Programmatic)

Aggregations

Lease (org.estatio.module.lease.dom.Lease)57 LocalDate (org.joda.time.LocalDate)17 Programmatic (org.apache.isis.applib.annotation.Programmatic)16 ApplicationException (org.apache.isis.applib.ApplicationException)11 Charge (org.estatio.module.charge.dom.Charge)11 Test (org.junit.Test)11 LeaseItem (org.estatio.module.lease.dom.LeaseItem)10 Occupancy (org.estatio.module.lease.dom.occupancy.Occupancy)10 Unit (org.estatio.module.asset.dom.Unit)9 InvoiceForLease (org.estatio.module.lease.dom.invoicing.InvoiceForLease)9 Property (org.estatio.module.asset.dom.Property)7 Party (org.estatio.module.party.dom.Party)6 Action (org.apache.isis.applib.annotation.Action)5 ApplicationTenancy (org.isisaddons.module.security.dom.tenancy.ApplicationTenancy)5 Before (org.junit.Before)5 ArrayList (java.util.ArrayList)4 List (java.util.List)4 PaymentMethod (org.estatio.module.invoice.dom.PaymentMethod)4 InvoiceItemForLease (org.estatio.module.lease.dom.invoicing.InvoiceItemForLease)4 BigDecimal (java.math.BigDecimal)3