use of com.salesmanager.core.model.shipping.ShippingSummary in project shopizer by shopizer-ecommerce.
the class OrderShippingApi method shipping.
/**
* Get shipping quote based on postal code
* @param code
* @param address
* @param merchantStore
* @param language
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = { "/cart/{code}/shipping" }, method = RequestMethod.POST)
@ResponseBody
@ApiImplicitParams({ @ApiImplicitParam(name = "store", dataType = "String", defaultValue = "DEFAULT"), @ApiImplicitParam(name = "lang", dataType = "String", defaultValue = "en") })
public ReadableShippingSummary shipping(@PathVariable final String code, @RequestBody AddressLocation address, @ApiIgnore MerchantStore merchantStore, @ApiIgnore Language language, HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
Locale locale = request.getLocale();
ShoppingCart cart = shoppingCartFacade.getShoppingCartModel(code, merchantStore);
if (cart == null) {
response.sendError(404, "Cart id " + code + " does not exist");
}
Delivery addr = new Delivery();
addr.setPostalCode(address.getPostalCode());
Country c = countryService.getByCode(address.getCountryCode());
if (c == null) {
c = merchantStore.getCountry();
}
addr.setCountry(c);
Customer temp = new Customer();
temp.setAnonymous(true);
temp.setDelivery(addr);
ShippingQuote quote = orderFacade.getShippingQuote(temp, cart, merchantStore, language);
ShippingSummary summary = orderFacade.getShippingSummary(quote, merchantStore, language);
ReadableShippingSummary shippingSummary = new ReadableShippingSummary();
ReadableShippingSummaryPopulator populator = new ReadableShippingSummaryPopulator();
populator.setPricingService(pricingService);
populator.populate(summary, shippingSummary, merchantStore, language);
List<ShippingOption> options = quote.getShippingOptions();
if (!CollectionUtils.isEmpty(options)) {
for (ShippingOption shipOption : options) {
StringBuilder moduleName = new StringBuilder();
moduleName.append("module.shipping.").append(shipOption.getShippingModuleCode());
String carrier = messages.getMessage(moduleName.toString(), new String[] { merchantStore.getStorename() }, locale);
String note = messages.getMessage(moduleName.append(".note").toString(), locale, "");
shipOption.setDescription(carrier);
shipOption.setNote(note);
// option name
if (!StringUtils.isBlank(shipOption.getOptionCode())) {
// try to get the translate
StringBuilder optionCodeBuilder = new StringBuilder();
try {
optionCodeBuilder.append("module.shipping.").append(shipOption.getShippingModuleCode());
String optionName = messages.getMessage(optionCodeBuilder.toString(), new String[] { merchantStore.getStorename() }, locale);
shipOption.setOptionName(optionName);
} catch (Exception e) {
// label not found
LOGGER.warn("No shipping code found for " + optionCodeBuilder.toString());
}
}
}
shippingSummary.setShippingOptions(options);
}
return shippingSummary;
} catch (Exception e) {
LOGGER.error("Error while getting shipping quote", e);
try {
response.sendError(503, "Error while getting shipping quote" + e.getMessage());
} catch (Exception ignore) {
}
return null;
}
}
use of com.salesmanager.core.model.shipping.ShippingSummary in project shopizer by shopizer-ecommerce.
the class OrderTotalApi method calculateTotal.
/**
* Public api
* @param id
* @param quote
* @param merchantStore
* @param language
* @param response
* @return
*/
@RequestMapping(value = { "/cart/{code}/total" }, method = RequestMethod.GET)
@ResponseBody
@ApiImplicitParams({ @ApiImplicitParam(name = "store", dataType = "String", defaultValue = "DEFAULT"), @ApiImplicitParam(name = "lang", dataType = "String", defaultValue = "en") })
public ReadableOrderTotalSummary calculateTotal(@PathVariable final String code, @RequestParam(value = "quote", required = false) Long quote, @ApiIgnore MerchantStore merchantStore, // possible postal code, province and country
@ApiIgnore Language language, HttpServletResponse response) {
try {
ShoppingCart shoppingCart = shoppingCartFacade.getShoppingCartModel(code, merchantStore);
if (shoppingCart == null) {
response.sendError(404, "Cart code " + code + " does not exist");
return null;
}
ShippingSummary shippingSummary = null;
// get shipping quote if asked for
if (quote != null) {
shippingSummary = shippingQuoteService.getShippingSummary(quote, merchantStore);
}
OrderTotalSummary orderTotalSummary = null;
OrderSummary orderSummary = new OrderSummary();
orderSummary.setShippingSummary(shippingSummary);
List<ShoppingCartItem> itemsSet = new ArrayList<ShoppingCartItem>(shoppingCart.getLineItems());
orderSummary.setProducts(itemsSet);
orderTotalSummary = orderService.caculateOrderTotal(orderSummary, merchantStore, language);
ReadableOrderTotalSummary returnSummary = new ReadableOrderTotalSummary();
ReadableOrderSummaryPopulator populator = new ReadableOrderSummaryPopulator();
populator.setMessages(messages);
populator.setPricingService(pricingService);
populator.populate(orderTotalSummary, returnSummary, merchantStore, language);
return returnSummary;
} catch (Exception e) {
LOGGER.error("Error while calculating order summary", e);
try {
response.sendError(503, "Error while calculating order summary " + e.getMessage());
} catch (Exception ignore) {
}
return null;
}
}
use of com.salesmanager.core.model.shipping.ShippingSummary in project shopizer by shopizer-ecommerce.
the class OrderFacadeImpl method processOrder.
/**
* Process order from api
*/
@Override
public Order processOrder(com.salesmanager.shop.model.order.v1.PersistableOrder order, Customer customer, MerchantStore store, Language language, Locale locale) throws ServiceException {
Validate.notNull(order, "Order cannot be null");
Validate.notNull(customer, "Customer cannot be null");
Validate.notNull(store, "MerchantStore cannot be null");
Validate.notNull(language, "Language cannot be null");
Validate.notNull(locale, "Locale cannot be null");
try {
Order modelOrder = new Order();
persistableOrderApiPopulator.populate(order, modelOrder, store, language);
Long shoppingCartId = order.getShoppingCartId();
ShoppingCart cart = shoppingCartService.getById(shoppingCartId, store);
if (cart == null) {
throw new ServiceException("Shopping cart with id " + shoppingCartId + " does not exist");
}
Set<ShoppingCartItem> shoppingCartItems = cart.getLineItems();
List<ShoppingCartItem> items = new ArrayList<ShoppingCartItem>(shoppingCartItems);
Set<OrderProduct> orderProducts = new LinkedHashSet<OrderProduct>();
OrderProductPopulator orderProductPopulator = new OrderProductPopulator();
orderProductPopulator.setDigitalProductService(digitalProductService);
orderProductPopulator.setProductAttributeService(productAttributeService);
orderProductPopulator.setProductService(productService);
for (ShoppingCartItem item : shoppingCartItems) {
OrderProduct orderProduct = new OrderProduct();
orderProduct = orderProductPopulator.populate(item, orderProduct, store, language);
orderProduct.setOrder(modelOrder);
orderProducts.add(orderProduct);
}
modelOrder.setOrderProducts(orderProducts);
if (order.getAttributes() != null && order.getAttributes().size() > 0) {
Set<OrderAttribute> attrs = new HashSet<OrderAttribute>();
for (com.salesmanager.shop.model.order.OrderAttribute attribute : order.getAttributes()) {
OrderAttribute attr = new OrderAttribute();
attr.setKey(attribute.getKey());
attr.setValue(attribute.getValue());
attr.setOrder(modelOrder);
attrs.add(attr);
}
modelOrder.setOrderAttributes(attrs);
}
// requires Shipping information (need a quote id calculated)
ShippingSummary shippingSummary = null;
// get shipping quote if asked for
if (order.getShippingQuote() != null && order.getShippingQuote().longValue() > 0) {
shippingSummary = shippingQuoteService.getShippingSummary(order.getShippingQuote(), store);
if (shippingSummary != null) {
modelOrder.setShippingModuleCode(shippingSummary.getShippingModule());
}
}
// requires Order Totals, this needs recalculation and then compare
// total with the amount sent as part
// of process order request. If totals does not match, an error
// should be thrown.
OrderTotalSummary orderTotalSummary = null;
OrderSummary orderSummary = new OrderSummary();
orderSummary.setShippingSummary(shippingSummary);
List<ShoppingCartItem> itemsSet = new ArrayList<ShoppingCartItem>(cart.getLineItems());
orderSummary.setProducts(itemsSet);
orderTotalSummary = orderService.caculateOrderTotal(orderSummary, customer, store, language);
if (order.getPayment().getAmount() == null) {
throw new ConversionException("Requires Payment.amount");
}
String submitedAmount = order.getPayment().getAmount();
BigDecimal calculatedAmount = orderTotalSummary.getTotal();
String strCalculatedTotal = calculatedAmount.toPlainString();
// compare both prices
if (!submitedAmount.equals(strCalculatedTotal)) {
throw new ConversionException("Payment.amount does not match what the system has calculated " + strCalculatedTotal + " (received " + submitedAmount + ") please recalculate the order and submit again");
}
modelOrder.setTotal(calculatedAmount);
List<com.salesmanager.core.model.order.OrderTotal> totals = orderTotalSummary.getTotals();
Set<com.salesmanager.core.model.order.OrderTotal> set = new HashSet<com.salesmanager.core.model.order.OrderTotal>();
if (!CollectionUtils.isEmpty(totals)) {
for (com.salesmanager.core.model.order.OrderTotal total : totals) {
total.setOrder(modelOrder);
set.add(total);
}
}
modelOrder.setOrderTotal(set);
PersistablePaymentPopulator paymentPopulator = new PersistablePaymentPopulator();
paymentPopulator.setPricingService(pricingService);
Payment paymentModel = new Payment();
paymentPopulator.populate(order.getPayment(), paymentModel, store, language);
modelOrder.setShoppingCartCode(cart.getShoppingCartCode());
/**
*/
if (!StringUtils.isBlank(customer.getNick()) && !customer.isAnonymous()) {
if (order.getCustomerId() == null && (customerFacade.checkIfUserExists(customer.getNick(), store))) {
customer.setAnonymous(true);
customer.setNick(null);
// send email instructions
}
}
// order service
modelOrder = orderService.processOrder(modelOrder, customer, items, orderTotalSummary, paymentModel, store);
// update cart
try {
cart.setOrderId(modelOrder.getId());
shoppingCartFacade.saveOrUpdateShoppingCart(cart);
} catch (Exception e) {
LOGGER.error("Cannot delete cart " + cart.getId(), e);
}
// email management
if ("true".equals(coreConfiguration.getProperty("ORDER_EMAIL_API"))) {
// send email
try {
notify(modelOrder, customer, store, language, locale);
} catch (Exception e) {
LOGGER.error("Cannot send order confirmation email", e);
}
}
return modelOrder;
} catch (Exception e) {
throw new ServiceException(e);
}
}
use of com.salesmanager.core.model.shipping.ShippingSummary in project shopizer by shopizer-ecommerce.
the class OrderFacadeImpl method getShippingSummary.
/**
* ShippingSummary contains the subset of information of a ShippingQuote
*/
@Override
public ShippingSummary getShippingSummary(ShippingQuote quote, MerchantStore store, Language language) {
ShippingSummary summary = new ShippingSummary();
if (quote.getSelectedShippingOption() != null) {
summary.setShippingQuote(true);
summary.setFreeShipping(quote.isFreeShipping());
summary.setTaxOnShipping(quote.isApplyTaxOnShipping());
summary.setHandling(quote.getHandlingFees());
summary.setShipping(quote.getSelectedShippingOption().getOptionPrice());
summary.setShippingOption(quote.getSelectedShippingOption().getOptionName());
summary.setShippingModule(quote.getShippingModuleCode());
summary.setShippingOptionCode(quote.getSelectedShippingOption().getOptionCode());
if (quote.getDeliveryAddress() != null) {
summary.setDeliveryAddress(quote.getDeliveryAddress());
}
}
return summary;
}
use of com.salesmanager.core.model.shipping.ShippingSummary in project shopizer by shopizer-ecommerce.
the class ShippingServiceImpl method getShippingSummary.
@Override
public ShippingSummary getShippingSummary(MerchantStore store, ShippingQuote shippingQuote, ShippingOption selectedShippingOption) throws ServiceException {
ShippingSummary shippingSummary = new ShippingSummary();
shippingSummary.setFreeShipping(shippingQuote.isFreeShipping());
shippingSummary.setHandling(shippingQuote.getHandlingFees());
shippingSummary.setShipping(selectedShippingOption.getOptionPrice());
shippingSummary.setShippingModule(shippingQuote.getShippingModuleCode());
shippingSummary.setShippingOption(selectedShippingOption.getDescription());
return shippingSummary;
}
Aggregations