package fr.mch.mdo.restaurant.controller;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.Date;
import junit.framework.Assert;
import org.junit.Test;
import org.springframework.http.ResponseEntity;
import fr.mch.mdo.restaurant.beans.dto.AcknowledgmentMessage;
import fr.mch.mdo.restaurant.beans.dto.DinnerTableDto;
import fr.mch.mdo.restaurant.beans.dto.OrderLineDto;
import fr.mch.mdo.restaurant.ui.forms.FindOrderLineForm;
import fr.mch.mdo.restaurant.ui.forms.ResetTableForm;
import fr.mch.mdo.restaurant.ui.forms.SaveOrderLineForm;
import fr.mch.mdo.restaurant.ui.forms.TableHeaderForm;
import fr.mch.mdo.restaurant.web.AbstractControllerIntegrationTest;
public final class OrdersControllerIntegrationTest extends AbstractControllerIntegrationTest
{
private static final String USER_ENTRY_AGAIN_ORDER_CODE = "11";
public static final String context = SERVER_URL + OrdersController.ORDERS_CONTROLLER;
private static final Integer DEFAULT_CUSTOMERS_NUMBER = 2;
private static final String CUSTOMERS_NUMBER_PARAM_EXIST_EAT_IN_ORDERS_NOT_EMPTY_UPDATE_OK = "12";
private static final String CUSTOMERS_NUMBER_PARAM_EXIST_EAT_IN_ORDERS_NOT_EMPTY_UPDATE_NOK = "12NOK";
private static final String CUSTOMERS_NUMBER_PARAM_EXIST_TAKEAWAY_ORDERS_NOT_EMPTY = "E1";
private static final String CREATION_DATE_CUSTOMERS_NUMBER_PARAM_EXIST_TAKEAWAY_ORDERS_EMPTY_RESET_OK = "E1ROK";
private static final String CREATION_DATE_CUSTOMERS_NUMBER_PARAM_EXIST_TAKEAWAY_ORDERS_EMPTY_RESET_NOK = "E1RKO";
private static final String CREATION_DATE_CUSTOMERS_NUMBER_PARAM_NOT_EXIST_TAKEAWAY = "E1NE";
private static final String CREATION_DATE_CUSTOMERS_NUMBER_PARAM_NOT_EXIST_EAT_IN_1 = "12NE1";
private static final String CREATION_DATE_CUSTOMERS_NUMBER_PARAM_NOT_EXIST_EAT_IN_2 = "12NE2";
private DinnerTableDto tableHeader(Long restaurantId, Long userAuthenticationId, String tableNumber) {
ResponseEntity<DinnerTableDto> response = null;
if (userAuthenticationId == null) {
StringBuilder sb = new StringBuilder(context).append(OrdersController.RESTAURANT_ID_TABLE_HEADER_BY_NUMBER_NUMBER);
response = restTemplate.getForEntity(sb.toString(), DinnerTableDto.class, restaurantId, tableNumber);
} else {
StringBuilder sb = new StringBuilder(context).append(OrdersController.RESTAURANT_ID_USER_AUTHENTICATION_ID_TABLE_HEADER_BY_NUMBER_NUMBER);
response = restTemplate.getForEntity(sb.toString(), DinnerTableDto.class, restaurantId, userAuthenticationId, tableNumber);
}
Assert.assertNotNull(response.getBody());
return response.getBody();
}
private Integer tableOrdersSize(Long id) {
StringBuilder sb = new StringBuilder(context).append(OrdersController.TABLE_ORDERS_SIZE_ID);
ResponseEntity<Integer> response = restTemplate.getForEntity(sb.toString(), Integer.class, id);
return response.getBody();
}
private DinnerTableDto createTable(Long restaurantId, Long userAuthenticationId, TableHeaderForm table) {
StringBuilder sb = new StringBuilder(context).append(OrdersController.CREATE_TABLE_RESTAURANT_ID_USER_AUTHENTICATION_ID);
ResponseEntity<DinnerTableDto> response = restTemplate.postForEntity(sb.toString(), table, DinnerTableDto.class, restaurantId, userAuthenticationId);
return response.getBody();
}
private DinnerTableDto findTable(Long id) {
StringBuilder sb = new StringBuilder(context).append(OrdersController.FIND_TABLE_ID);
ResponseEntity<DinnerTableDto> response = restTemplate.getForEntity(sb.toString(), DinnerTableDto.class, id);
return response.getBody();
}
private AcknowledgmentMessage resetTable(String tableNumber, Long dinnerTableId, Long restaurantId, Long userAuthenticationId, Integer customersNumber) {
StringBuilder sb = new StringBuilder(context).append(OrdersController.RESET_TABLE_DINNER_TABLE_ID);
ResetTableForm form = new ResetTableForm();
form.setCustomersNumber(customersNumber);
form.setNumber(tableNumber);
form.setRestaurantId(restaurantId);
form.setUserAuthenticationId(userAuthenticationId);
ResponseEntity<AcknowledgmentMessage> response = restTemplate.postForEntity(sb.toString(), form, AcknowledgmentMessage.class, dinnerTableId);
AcknowledgmentMessage ack = response.getBody();
if (CREATION_DATE_CUSTOMERS_NUMBER_PARAM_EXIST_TAKEAWAY_ORDERS_EMPTY_RESET_NOK.equals(tableNumber)) {
ack = new AcknowledgmentMessage();
ack.setType(AcknowledgmentMessage.Type.ERROR);
}
return ack;
}
private AcknowledgmentMessage updateTableCustomersNumber(String tableNumber, Long id, Integer customersNumber) {
StringBuilder sb = new StringBuilder(context).append(OrdersController.UPDATE_TABLE_ID_CUSTOMERS_NUMBER_CUSTOMERS_NUMBER);
ResponseEntity<AcknowledgmentMessage> response = restTemplate.postForEntity(sb.toString(), null, AcknowledgmentMessage.class, id, customersNumber);
AcknowledgmentMessage ack = response.getBody();
if (CUSTOMERS_NUMBER_PARAM_EXIST_EAT_IN_ORDERS_NOT_EMPTY_UPDATE_NOK.equals(tableNumber)) {
ack = new AcknowledgmentMessage();
ack.setType(AcknowledgmentMessage.Type.ERROR);
}
return ack;
}
@Test
public void header() {
Long pathVarRestaurantId = 1L;
Long pathVarUserAuthenticationId = 1L;
String userEntryTableNumber = null;
Integer userEntryCustomersNumber = null;
DinnerTableDto table = null;
// The table exists with orders not empty. It is not a take-away type.
// The userEntryCustomersNumber is null.
// The method updateTableCustomersNumber is OK.
userEntryTableNumber = CUSTOMERS_NUMBER_PARAM_EXIST_EAT_IN_ORDERS_NOT_EMPTY_UPDATE_OK;
table = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId, userEntryTableNumber, null);
checkTableHeaderResultExistOrdersNotEmpty(table);
// The table exists with orders not empty. It is not a take-away type.
// The userEntryCustomersNumber is not null.
// The customer number has changed compared to the one from database.
// The method updateTableCustomersNumber is OK.
userEntryTableNumber = CUSTOMERS_NUMBER_PARAM_EXIST_EAT_IN_ORDERS_NOT_EMPTY_UPDATE_OK;
userEntryCustomersNumber = 1;
table = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId, userEntryTableNumber, userEntryCustomersNumber);
checkTableHeaderResultExistOrdersNotEmpty(table);
// The table exists with orders not empty. It is not a take-away type.
// The userEntryCustomersNumber is not null.
// The customer number is the same as the one from database.
// The method updateTableCustomersNumber is OK.
userEntryTableNumber = CUSTOMERS_NUMBER_PARAM_EXIST_EAT_IN_ORDERS_NOT_EMPTY_UPDATE_OK;
table = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId, userEntryTableNumber, userEntryCustomersNumber);
checkTableHeaderResultExistOrdersNotEmpty(table);
// The table exists with orders not empty. It is not a take-away type.
// The userEntryCustomersNumber is not null.
// The customer number has not changed compared to the one from database.
// The method updateTableCustomersNumber is NOK.
userEntryTableNumber = CUSTOMERS_NUMBER_PARAM_EXIST_EAT_IN_ORDERS_NOT_EMPTY_UPDATE_NOK;
table = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId,
userEntryTableNumber, userEntryCustomersNumber);
checkTableHeaderResultExistOrdersNotEmpty(table);
// The table exists with orders not empty. It is a take-away type.
userEntryTableNumber = CUSTOMERS_NUMBER_PARAM_EXIST_TAKEAWAY_ORDERS_NOT_EMPTY;
table = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId, userEntryTableNumber, userEntryCustomersNumber);
checkTableHeaderResultExistOrdersNotEmpty(table);
// The table exists with empty orders.
// The method resetTableCreationDateCustomersNumber is OK.
userEntryTableNumber = CREATION_DATE_CUSTOMERS_NUMBER_PARAM_EXIST_TAKEAWAY_ORDERS_EMPTY_RESET_OK;
table = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId, userEntryTableNumber, userEntryCustomersNumber);
checkTableHeaderCreateOrReset(table);
// The table exists with empty orders.
// The method resetTableCreationDateCustomersNumber is NOK.
userEntryTableNumber = CREATION_DATE_CUSTOMERS_NUMBER_PARAM_EXIST_TAKEAWAY_ORDERS_EMPTY_RESET_NOK;
table = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId, userEntryTableNumber, userEntryCustomersNumber);
checkTableHeaderCreateOrReset(table);
// The table does not exist but table type is take-away so create it.
userEntryTableNumber = CREATION_DATE_CUSTOMERS_NUMBER_PARAM_NOT_EXIST_TAKEAWAY;
table = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId, userEntryTableNumber, userEntryCustomersNumber);
checkTableHeaderCreateOrReset(table);
// The table does not exist but table type is not take-away type.
// The userEntryCustomersNumber is not null.
userEntryTableNumber = CREATION_DATE_CUSTOMERS_NUMBER_PARAM_NOT_EXIST_EAT_IN_1;
table = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId, userEntryTableNumber, userEntryCustomersNumber);
checkTableHeaderCreateOrReset(table);
// The table does not exist but table type is not take-away type.
// The userEntryCustomersNumber is null.
userEntryTableNumber = CREATION_DATE_CUSTOMERS_NUMBER_PARAM_NOT_EXIST_EAT_IN_2;
table = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId, userEntryTableNumber, null);
checkTableHeaderCreateOrReset(table);
}
private DinnerTableDto tableHeader(Long pathVarRestaurantId, Long pathVarUserAuthenticationId,
String userEntryTableNumber, Integer userEntryCustomersNumber) {
DinnerTableDto result = null;
DinnerTableDto header = this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId, userEntryTableNumber);
// Does this table already exist(check id) ?
if (header.getId() != null) {
// First case: Yes, the table already exists.
Integer size = this.tableOrdersSize(header.getId());
// Are the orders empty(check orders) ?
if (size != null && size.intValue() > 0 ) {
// No, orders is not empty.
// Is this table for take-away(check take-away) ?
if (Boolean.TRUE.equals(header.getTakeaway())) {
// Yes, the table is for take-away then directly display the table.
} else {
// Get user entry number of customers.
// if userEntryCustomersNumber is null then do not update the Customers Number.
// Ask to enter the customers number again with warning message.
if (userEntryCustomersNumber == null) {
return this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId,
userEntryTableNumber, header.getCustomersNumber());
}
Assert.assertNotNull("tableHeader userEntryCustomersNumber", userEntryCustomersNumber);
// Is user entry number of customers equal to the one from database ?
if (!userEntryCustomersNumber.equals(header.getCustomersNumber())) {
// No, the user entry number of customers is not equal to the one from database then update the field
header.setCustomersNumber(userEntryCustomersNumber);
// Update the customers number.
AcknowledgmentMessage message = this.updateTableCustomersNumber(header.getNumber(), header.getId(), header.getCustomersNumber());
if (AcknowledgmentMessage.Type.ERROR.equals(message.getType())) {
// Back to the previous step, i.e, ask to enter the customers number again with warning message.
return this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId,
CUSTOMERS_NUMBER_PARAM_EXIST_EAT_IN_ORDERS_NOT_EMPTY_UPDATE_OK, userEntryCustomersNumber);
}
}
}
} else {
// Yes, orders is empty then reset the customers number to 0 and the creation date to now and display the table.
AcknowledgmentMessage message = this.resetTable(header.getNumber(), header.getId(), pathVarRestaurantId, pathVarUserAuthenticationId, userEntryCustomersNumber);
if (AcknowledgmentMessage.Type.ERROR.equals(message.getType())) {
// Back to the previous step, i.e, ask to enter the table number again with warning message.
return this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId,
CREATION_DATE_CUSTOMERS_NUMBER_PARAM_EXIST_TAKEAWAY_ORDERS_EMPTY_RESET_OK, userEntryCustomersNumber);
}
}
// Display the table.
result = this.findTable(header.getId());
} else {
// Second case: No, the table does not exist.
TableHeaderForm tableHeaderForm = new TableHeaderForm();
tableHeaderForm.setNumber(header.getNumber());
// Is this table for take-away(check takeaway) ?
if (Boolean.TRUE.equals(header.getTakeaway())) {
// Yes, the table is for take-away
// Create the table and display it.
tableHeaderForm.setCustomersNumber(0);
} else {
// Get user entry number of customers.
// If userEntryCustomersNumber is null then do not create the table.
// Ask to enter the customers number again with warning message.
if (userEntryCustomersNumber == null) {
return this.tableHeader(pathVarRestaurantId, pathVarUserAuthenticationId,
userEntryTableNumber, DEFAULT_CUSTOMERS_NUMBER);
}
Assert.assertNotNull("tableHeader userEntryCustomersNumber", userEntryCustomersNumber);
// Create the table and display it.
tableHeaderForm.setCustomersNumber(userEntryCustomersNumber);
}
// Display the table.
result = this.createTable(pathVarRestaurantId, pathVarUserAuthenticationId, tableHeaderForm);
}
return result;
}
private void checkTableHeaderResultExistOrdersNotEmpty(DinnerTableDto table) {
Assert.assertNotNull("DinnerTableDto", table);
Assert.assertFalse("DinnerTableDto.allowModifyOrdersAfterPrinting", table.getAllowModifyOrdersAfterPrinting());
Assert.assertNotNull("DinnerTableDto.amountPay", table.getAmountPay());
Assert.assertNotNull("DinnerTableDto.amountsSum", table.getAmountsSum());
Assert.assertNull("DinnerTableDto.cashingDate", table.getCashingDate());
Assert.assertNotNull("DinnerTableDto.customersNumber", table.getCustomersNumber());
Assert.assertNotNull("DinnerTableDto.id", table.getId());
Assert.assertNotNull("DinnerTableDto.number", table.getNumber());
Assert.assertNotNull("DinnerTableDto.orders", table.getOrders());
Assert.assertNull("DinnerTableDto.printingDate", table.getPrintingDate());
Assert.assertNotNull("DinnerTableDto.quantitiesSum", table.getQuantitiesSum());
Assert.assertNotNull("DinnerTableDto.reduction", table.getReduction());
Assert.assertNotNull("DinnerTableDto.reductionRatio", table.getReductionRatio());
Assert.assertFalse("DinnerTableDto.reductionRatioManuallyChanged", table.getReductionRatioManuallyChanged());
Assert.assertNotNull("DinnerTableDto.registrationDate", table.getRegistrationDate());
Assert.assertNotNull("DinnerTableDto.takeaway", table.getTakeaway());
}
private void checkTableHeaderCreateOrReset(DinnerTableDto table) {
NumberFormat nf = NumberFormat.getInstance();
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
Assert.assertNotNull("DinnerTableDto", table);
Assert.assertFalse("DinnerTableDto.allowModifyOrdersAfterPrinting", table.getAllowModifyOrdersAfterPrinting());
Assert.assertNotNull("DinnerTableDto.amountPay", table.getAmountPay());
Assert.assertEquals("DinnerTableDto.amountPay", nf.format(BigDecimal.ZERO), nf.format(table.getAmountPay()));
Assert.assertNotNull("DinnerTableDto.amountsSum", table.getAmountsSum());
Assert.assertEquals("DinnerTableDto.amountsSum", nf.format(BigDecimal.ZERO), nf.format(table.getAmountsSum()));
Assert.assertNull("DinnerTableDto.cashingDate", table.getCashingDate());
Assert.assertNotNull("DinnerTableDto.customersNumber", table.getCustomersNumber());
Assert.assertNotNull("DinnerTableDto.id", table.getId());
Assert.assertNotNull("DinnerTableDto.number", table.getNumber());
Assert.assertNotNull("DinnerTableDto.orders", table.getOrders());
Assert.assertTrue("DinnerTableDto.orders", table.getOrders().isEmpty());
Assert.assertNull("DinnerTableDto.printingDate", table.getPrintingDate());
Assert.assertNotNull("DinnerTableDto.quantitiesSum", table.getQuantitiesSum());
Assert.assertEquals("DinnerTableDto.quantitiesSum", nf.format(BigDecimal.ZERO), nf.format(table.getQuantitiesSum()));
Assert.assertNotNull("DinnerTableDto.reduction", table.getReduction());
Assert.assertEquals("DinnerTableDto.reduction", nf.format(BigDecimal.ZERO), nf.format(table.getReduction()));
Assert.assertNotNull("DinnerTableDto.reductionRatio", table.getReductionRatio());
Assert.assertFalse("DinnerTableDto.reductionRatioManuallyChanged", table.getReductionRatioManuallyChanged());
// WARNING : this could be false if the test is launched between 23:59:59 and 00:00:01
Assert.assertEquals("DinnerTableDto.registrationDate", df.format(new Date()), df.format(table.getRegistrationDate()));
Assert.assertNotNull("DinnerTableDto.takeaway", table.getTakeaway());
}
private OrderLineDto findOrderLine(FindOrderLineForm form, Long restaurantId, Long locId) {
StringBuilder sb = new StringBuilder(context).append(OrdersController.RESTAURANT_ID_FIND_ORDER_LINE_CODE_LOC_ID);
OrderLineDto result = restTemplate.postForObject(sb.toString(), form, OrderLineDto.class, restaurantId, locId);
Assert.assertNotNull(result);
Assert.assertEquals("OrderLineDto quantity", form.getQuantity(), result.getQuantity());
Assert.assertEquals("OrderLineDto orderCode", form.getOrderCode(), result.getCode());
return result;
}
private Long saveOrderLine(OrderLineDto orderLine) {
SaveOrderLineForm form = new SaveOrderLineForm();
form.setOrderLine(orderLine);
StringBuilder sb = new StringBuilder(context).append(OrdersController.SAVE_ORDER_LINE);
AcknowledgmentMessage ack = restTemplate.postForObject(sb.toString(), form, AcknowledgmentMessage.class);
Assert.assertNotNull(ack);
Assert.assertTrue(ack.getAttachment() instanceof Number);
Long result = Long.valueOf(ack.getAttachment().toString());
return result;
}
@Test
public void orders() {
Long varOrderLineId = null;
Long firstInsertOrderLineId = null;
for (int i = 0; i < 2; i++) {
if (i == 1) {
varOrderLineId = firstInsertOrderLineId;
}
// For finding order line.
Long pathVarRestaurantId = 1L;
Long pathVarLocId = 1L;
// Quantity is used to process the amount.
BigDecimal userEntryQuantity = new BigDecimal(2.1);
String userEntryCode = "+" + USER_ENTRY_AGAIN_ORDER_CODE;
FindOrderLineForm form = new FindOrderLineForm();
// For saving order line.
Long varDinnerTableId = 1L;
String userEntryLabel = "User Entry Label";
BigDecimal userEntryUnitPrice = new BigDecimal(2.5);
// Product Special Code does not exist.
// Product does not exist.
form = new FindOrderLineForm();
form.setQuantity(userEntryQuantity);
form.setOrderCode(userEntryCode);
OrderLineDto orderLine = this.findAndSaveOrderLine(pathVarRestaurantId, pathVarLocId,
userEntryLabel, userEntryUnitPrice,
varDinnerTableId, varOrderLineId,
form);
firstInsertOrderLineId = orderLine.getId();
this.checkSavingOrderLine(orderLine, firstInsertOrderLineId);
// Product Special Code does not exist.
// Product does exist.
userEntryCode = USER_ENTRY_AGAIN_ORDER_CODE;
form = new FindOrderLineForm();
form.setQuantity(userEntryQuantity);
form.setOrderCode(userEntryCode);
orderLine = this.findAndSaveOrderLine(pathVarRestaurantId, pathVarLocId,
userEntryLabel, userEntryUnitPrice,
varDinnerTableId, varOrderLineId,
form);
if (varOrderLineId == null) {
// Insert new Order Line.
firstInsertOrderLineId++;
} else {
// Update Order Line.
}
this.checkSavingOrderLine(orderLine, firstInsertOrderLineId);
// Product Special Code does exist.
// Product does not exist.
userEntryCode = "/";
form = new FindOrderLineForm();
form.setQuantity(userEntryQuantity);
form.setOrderCode(userEntryCode);
orderLine = this.findAndSaveOrderLine(pathVarRestaurantId, pathVarLocId,
userEntryLabel, userEntryUnitPrice,
varDinnerTableId, varOrderLineId,
form);
if (varOrderLineId == null) {
// Insert new Order Line.
firstInsertOrderLineId++;
} else {
// Update Order Line.
}
this.checkSavingOrderLine(orderLine, firstInsertOrderLineId);
// Product Special Code does exist.
// Product does exist.
userEntryCode = "#" + USER_ENTRY_AGAIN_ORDER_CODE;
form = new FindOrderLineForm();
form.setQuantity(userEntryQuantity);
form.setOrderCode(userEntryCode);
orderLine = this.findAndSaveOrderLine(pathVarRestaurantId, pathVarLocId,
userEntryLabel, userEntryUnitPrice,
varDinnerTableId, varOrderLineId,
form);
if (varOrderLineId == null) {
// Insert new Order Line.
firstInsertOrderLineId++;
} else {
// Update Order Line.
}
this.checkSavingOrderLine(orderLine, firstInsertOrderLineId);
}
}
private void checkSavingOrderLine(OrderLineDto orderLine, Long checkingInsertOrderLineId) {
Assert.assertNotNull("OrderLineDto id", orderLine.getId());
Assert.assertEquals("OrderLineDto id", checkingInsertOrderLineId, orderLine.getId());
}
public OrderLineDto findAndSaveOrderLine(Long pathVarRestaurantId, Long pathVarLocId,
String userEntryLabel, BigDecimal userEntryUnitPrice,
Long varDinnerTableId, Long varOrderLineId,
FindOrderLineForm form) {
NumberFormat nf = NumberFormat.getInstance();
Assert.assertNotNull("FindOrderLineForm", form);
Assert.assertNotNull("FindOrderLineForm.getQuantity", form.getQuantity());
Assert.assertNotNull("FindOrderLineForm.getOrderCode", form.getOrderCode());
Assert.assertNotNull("pathVarRestaurantId", pathVarRestaurantId);
Assert.assertNotNull("pathVarLocId", pathVarLocId);
Assert.assertNotNull("User Entry label", userEntryLabel);
Assert.assertNotNull("User Entry unit price", userEntryUnitPrice);
OrderLineDto result = this.findOrderLine(form, pathVarRestaurantId, pathVarLocId);
Assert.assertNotNull("OrderLineDto", result);
Assert.assertEquals("OrderLineDto quantity", nf.format(form.getQuantity()), nf.format(result.getQuantity()));
Assert.assertEquals("OrderLineDto code", form.getOrderCode(), result.getCode());
// Does OrderCode contain product special code ?
if (result.getProductSpecialCode() == null) {
// No, there is no product special code
// Does OrderCode contain product ?
if (result.getProduct() == null) {
// No, there is no product associated.
// Display warning that there isn't any product with this code.
// Ask to change the code.
form.setOrderCode(USER_ENTRY_AGAIN_ORDER_CODE);
return this.findAndSaveOrderLine(pathVarRestaurantId, pathVarLocId, userEntryLabel, userEntryUnitPrice, varDinnerTableId, varOrderLineId, form);
} else {
// Yes, there is product associated.
// Save the order line
}
} else {
// Yes, there is product special code
// Does OrderCode contain product ?
if (result.getProduct() == null) {
// No, there is no product associated.
// Set the label and the unit price and amount.
result.setLabel(userEntryLabel);
result.setUnitPrice(userEntryUnitPrice);
result.setAmount(result.getQuantity().multiply(userEntryUnitPrice));
// Save the order line
} else {
// Yes, there is product associated.
// Save the order line
}
}
// Set the table id before saving
result.setDinnerTableId(varDinnerTableId);
if (varOrderLineId != null) {
// Update Order Line.
result.setId(varOrderLineId);
} else {
// Insert new Order Line.
}
// Save the order line
Long orderLineId = this.saveOrderLine(result);
result.setId(orderLineId);
return result;
}
}