use of org.estatio.module.capex.dom.order.Order in project estatio by estatio.
the class IncomingDocAsOrderViewModel_Test method double_order_check_works.
@Test
public void double_order_check_works() throws Exception {
// given
IncomingDocAsOrderViewModel incomingDocAsOrderViewModel = new IncomingDocAsOrderViewModel();
incomingDocAsOrderViewModel.orderRepository = mockOrderRepository;
Order newOrder = new Order();
incomingDocAsOrderViewModel.setDomainObject(newOrder);
String sellerOrderReference = "123-456-7";
Organisation seller = new Organisation();
LocalDate orderDate = new LocalDate(2017, 01, 01);
Order existingOrder = new Order();
// expect
context.checking(new Expectations() {
{
oneOf(mockOrderRepository).findBySellerOrderReferenceAndSellerAndOrderDate(sellerOrderReference, seller, orderDate);
will(returnValue(newOrder));
oneOf(mockOrderRepository).findBySellerOrderReferenceAndSeller(sellerOrderReference, seller);
will(returnValue(Arrays.asList(newOrder, existingOrder)));
}
});
// when
incomingDocAsOrderViewModel.setSellerOrderReference(sellerOrderReference);
incomingDocAsOrderViewModel.setSeller(seller);
incomingDocAsOrderViewModel.setOrderDate(orderDate);
String message = incomingDocAsOrderViewModel.doubleOrderCheck();
// then
Assertions.assertThat(message).contains("WARNING: Orders with the same seller order reference of this seller are found");
// and expect
context.checking(new Expectations() {
{
oneOf(mockOrderRepository).findBySellerOrderReferenceAndSellerAndOrderDate(sellerOrderReference, seller, orderDate);
will(returnValue(existingOrder));
}
});
// when
message = incomingDocAsOrderViewModel.doubleOrderCheck();
// then
Assertions.assertThat(message).isEqualTo("WARNING: There is already an order with the same seller order reference and order date for this seller. Please check.");
}
use of org.estatio.module.capex.dom.order.Order in project estatio by estatio.
the class IncomingDocAsOrderViewModel_Test method mixin_save_works.
@Test
public void mixin_save_works() throws Exception {
// given
IncomingDocAsOrderViewModel incomingDocAsOrderViewModel = new IncomingDocAsOrderViewModel();
Order order = new Order();
incomingDocAsOrderViewModel.clockService = mockClockService;
order.orderItemRepository = mockOrderItemRepository;
incomingDocAsOrderViewModel.setDomainObject(order);
BigDecimal netAmount = new BigDecimal("100.00");
BigDecimal vatAmount = new BigDecimal("20.00");
BigDecimal grossAmount = new BigDecimal("120.00");
incomingDocAsOrderViewModel.setNetAmount(netAmount);
incomingDocAsOrderViewModel.setVatAmount(vatAmount);
incomingDocAsOrderViewModel.setGrossAmount(grossAmount);
// expect
context.checking(new Expectations() {
{
oneOf(mockClockService).now();
will(returnValue(new LocalDate(2017, 01, 01)));
oneOf(mockOrderItemRepository).upsert(order, null, null, netAmount, vatAmount, grossAmount, null, null, null, null, null, null);
}
});
// when
incomingDocAsOrderViewModel.save();
}
use of org.estatio.module.capex.dom.order.Order in project estatio by estatio.
the class OrderMenu_Test method filterOrFindBySeller_filter_works.
@Test
public void filterOrFindBySeller_filter_works() {
OrderMenu.OrderFinder builder;
// given
builder = new OrderMenu.OrderFinder(mockOrderRepository, mockPartyRepository);
Order order1 = new Order();
Person personToBeFiltered = new Person();
Organisation seller = new Organisation();
order1.setSeller(seller);
Order order2 = new Order();
builder.setResult(Arrays.asList(order1, order2));
Assertions.assertThat(builder.getResult().size()).isEqualTo(2);
// expect
context.checking(new Expectations() {
{
oneOf(mockPartyRepository).findParties("*abc*");
will(returnValue(Arrays.asList(seller, personToBeFiltered)));
}
});
// when
builder.filterOrFindBySeller("abc");
// then
Assertions.assertThat(builder.getResult().size()).isEqualTo(1);
}
use of org.estatio.module.capex.dom.order.Order in project estatio by estatio.
the class OrderMenu_Test method filterOrFindByOrderDate_filter_works.
@Test
public void filterOrFindByOrderDate_filter_works() {
OrderMenu.OrderFinder builder;
// given
builder = new OrderMenu.OrderFinder(mockOrderRepository, mockPartyRepository);
Order order1 = new Order();
Order order2 = new Order();
Order order3 = new Order();
order1.setOrderDate(new LocalDate(2017, 7, 15));
order2.setOrderDate(new LocalDate(2017, 7, 5));
order3.setOrderDate(new LocalDate(2017, 7, 16));
;
builder.setResult(Arrays.asList(order1, order2, order3));
final LocalDate dateSearchedFor = new LocalDate(2017, 7, 10);
Assertions.assertThat(builder.getResult().size()).isEqualTo(3);
// when
builder.filterOrFindByOrderDate(dateSearchedFor);
// then
Assertions.assertThat(builder.getResult().size()).isEqualTo(2);
Assertions.assertThat(builder.getResult()).contains(order1);
Assertions.assertThat(builder.getResult()).contains(order2);
}
use of org.estatio.module.capex.dom.order.Order in project estatio by estatio.
the class OrderBuilder method execute.
@Override
protected void execute(final ExecutionContext ec) {
checkParam("officeAdministrator", ec, Person.class);
checkParam("document", ec, Document.class);
checkParam("buyer", ec, Organisation.class);
checkParam("seller", ec, Organisation.class);
checkParam("property", ec, Property.class);
checkParam("project", ec, Project.class);
checkParam("entryDate", ec, LocalDate.class);
checkParam("itemTax", ec, Tax.class);
checkParam("item1Description", ec, String.class);
checkParam("item1NetAmount", ec, BigDecimal.class);
checkParam("item1VatAmount", ec, BigDecimal.class);
checkParam("item1GrossAmount", ec, BigDecimal.class);
checkParam("item1Charge", ec, Charge.class);
checkParam("item1Period", ec, String.class);
checkParam("item2Description", ec, String.class);
checkParam("item2NetAmount", ec, BigDecimal.class);
checkParam("item2VatAmount", ec, BigDecimal.class);
checkParam("item2GrossAmount", ec, BigDecimal.class);
checkParam("item2Charge", ec, Charge.class);
checkParam("item2Period", ec, String.class);
// given we categorise for a property
// workaround: clear MeService#me cache
queryResultsCache.resetForNextTransaction();
sudoService.sudo(officeAdministrator.getUsername(), () -> {
final String comment = "";
wrap(mixin(Document_categoriseAsOrder.class, document)).act(property, comment);
// given most/all of the info has been completed (not using our view model here).
final String documentName = document.getName();
Order order = orderRepository.findOrderByDocumentName(documentName).get(0);
// only way to create a first order item "legally" is through the view model
final IncomingDocAsOrderViewModel viewModel = mixin(Order_switchView.class, order).act();
final IncomingDocAsOrderViewModel.changeOrderDetails changeOrderDetails = mixin(IncomingDocAsOrderViewModel.changeOrderDetails.class, viewModel);
wrap(changeOrderDetails).act(changeOrderDetails.default0Act(), buyer, seller, changeOrderDetails.default3Act(), changeOrderDetails.default4Act());
wrap(viewModel).setTax(itemTax);
wrap(viewModel).setProperty(property);
wrap(viewModel).setProject(project);
wrap(viewModel).editCharge(item1Charge);
wrap(viewModel).setDescription(item1Description);
wrap(viewModel).setNetAmount(item1NetAmount);
wrap(viewModel).setVatAmount(item1VatAmount);
wrap(viewModel).setGrossAmount(item1GrossAmount);
wrap(viewModel).setPeriod(item1Period);
wrap(viewModel).setBudgetItem(null);
wrap(viewModel).save();
wrap(order).changeDates(order.default0ChangeDates(), entryDate);
// this does an upsert base on the charge, so we still end up with only one item
wrap(order).addItem(item1Charge, item1Description, item1NetAmount, item1VatAmount, item1GrossAmount, itemTax, // not a typo, but presumably the original fixture was wrong... guessing the upsert doesn't actually update this field
item2Period, property, project, null);
// add a different charge; this creates a second item
wrap(order).addItem(item2Charge, item2Description, item2NetAmount, item2VatAmount, item2GrossAmount, itemTax, item2Period, property, project, null);
this.object = order;
});
final List<OrderItem> items = Lists.newArrayList(this.object.getItems());
firstItem = items.get(0);
secondItem = items.get(1);
}
Aggregations