use of com.salesmanager.core.model.reference.zone.Zone in project shopizer by shopizer-ecommerce.
the class ZoneServiceImpl method getZones.
@SuppressWarnings("unchecked")
@Override
public List<Zone> getZones(Country country, Language language) throws ServiceException {
// Validate.notNull(country,"Country cannot be null");
Validate.notNull(language, "Language cannot be null");
List<Zone> zones = null;
try {
String countryCode = Constants.DEFAULT_COUNTRY;
if (country != null) {
countryCode = country.getIsoCode();
}
String cacheKey = ZONE_CACHE_PREFIX + countryCode + Constants.UNDERSCORE + language.getCode();
zones = (List<Zone>) cache.getFromCache(cacheKey);
if (zones == null) {
zones = zoneRepository.listByLanguageAndCountry(countryCode, language.getId());
// set names
for (Zone zone : zones) {
ZoneDescription description = zone.getDescriptions().get(0);
zone.setName(description.getName());
}
cache.putInCache(zones, cacheKey);
}
} catch (Exception e) {
LOGGER.error("getZones()", e);
}
return zones;
}
use of com.salesmanager.core.model.reference.zone.Zone in project shopizer by shopizer-ecommerce.
the class ReferenceController method getProvinces.
@SuppressWarnings("unchecked")
@RequestMapping(value = { "/admin/reference/provinces.html", "/shop/reference/provinces.html" }, method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> getProvinces(HttpServletRequest request, HttpServletResponse response) {
String countryCode = request.getParameter("countryCode");
String lang = request.getParameter("lang");
LOGGER.debug("Province Country Code " + countryCode);
AjaxResponse resp = new AjaxResponse();
try {
Language language = null;
if (!StringUtils.isBlank(lang)) {
language = languageService.getByCode(lang);
}
if (language == null) {
language = (Language) request.getAttribute("LANGUAGE");
}
if (language == null) {
language = languageService.getByCode(Constants.DEFAULT_LANGUAGE);
}
Map<String, Country> countriesMap = countryService.getCountriesMap(language);
Country country = countriesMap.get(countryCode);
List<Zone> zones = zoneService.getZones(country, language);
if (zones != null && zones.size() > 0) {
for (Zone zone : zones) {
@SuppressWarnings("rawtypes") Map entry = new HashMap();
entry.put("name", zone.getName());
entry.put("code", zone.getCode());
entry.put("id", zone.getId());
resp.addDataEntry(entry);
}
}
resp.setStatus(AjaxResponse.RESPONSE_STATUS_SUCCESS);
} catch (Exception e) {
LOGGER.error("GetProvinces()", e);
resp.setStatus(AjaxResponse.RESPONSE_STATUS_FAIURE);
}
final HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
String returnString = resp.toJSONString();
return new ResponseEntity<String>(returnString, httpHeaders, HttpStatus.OK);
}
use of com.salesmanager.core.model.reference.zone.Zone in project shopizer by shopizer-ecommerce.
the class OrderTest method getMerchantOrders.
@Test
public void getMerchantOrders() throws ServiceException {
Currency currency = currencyService.getByCode(USD_CURRENCY_CODE);
Country country = countryService.getByCode("US");
Zone zone = zoneService.getByCode("VT");
Language en = languageService.getByCode("en");
MerchantStore merchant = merchantService.getByCode(MerchantStore.DEFAULT_STORE);
/**
* Create a customer *
*/
Customer customer = new Customer();
customer.setMerchantStore(merchant);
customer.setDefaultLanguage(en);
customer.setEmailAddress("email@email.com");
customer.setPassword("-1999");
customer.setNick("My New nick");
customer.setCompany(" Apple");
customer.setGender(CustomerGender.M);
customer.setDateOfBirth(new Date());
Billing billing = new Billing();
billing.setAddress("Billing address");
billing.setCity("Billing city");
billing.setCompany("Billing company");
billing.setCountry(country);
billing.setFirstName("Carl");
billing.setLastName("Samson");
billing.setPostalCode("Billing postal code");
billing.setState("Billing state");
billing.setZone(zone);
Delivery delivery = new Delivery();
delivery.setAddress("Shipping address");
delivery.setCountry(country);
delivery.setZone(zone);
customer.setBilling(billing);
customer.setDelivery(delivery);
customerService.create(customer);
// create a product with attributes
/**
* CATALOG CREATION *
*/
ProductType generalType = productTypeService.getProductType(ProductType.GENERAL_TYPE);
/**
* Create the category
*/
Category shirts = new Category();
shirts.setMerchantStore(merchant);
shirts.setCode("shirts");
CategoryDescription shirtsEnglishDescription = new CategoryDescription();
shirtsEnglishDescription.setName("Shirts");
shirtsEnglishDescription.setCategory(shirts);
shirtsEnglishDescription.setLanguage(en);
Set<CategoryDescription> descriptions = new HashSet<CategoryDescription>();
descriptions.add(shirtsEnglishDescription);
shirts.setDescriptions(descriptions);
categoryService.create(shirts);
/**
* Create a manufacturer
*/
Manufacturer addidas = new Manufacturer();
addidas.setMerchantStore(merchant);
addidas.setCode("addidas");
ManufacturerDescription addidasDesc = new ManufacturerDescription();
addidasDesc.setLanguage(en);
addidasDesc.setManufacturer(addidas);
addidasDesc.setName("Addidas");
addidas.getDescriptions().add(addidasDesc);
manufacturerService.create(addidas);
/**
* Create an option
*/
ProductOption option = new ProductOption();
option.setMerchantStore(merchant);
option.setCode("color");
option.setProductOptionType(ProductOptionType.Radio.name());
ProductOptionDescription optionDescription = new ProductOptionDescription();
optionDescription.setLanguage(en);
optionDescription.setName("Color");
optionDescription.setDescription("Item color");
optionDescription.setProductOption(option);
option.getDescriptions().add(optionDescription);
productOptionService.saveOrUpdate(option);
/**
* first option value *
*/
ProductOptionValue white = new ProductOptionValue();
white.setMerchantStore(merchant);
white.setCode("white");
ProductOptionValueDescription whiteDescription = new ProductOptionValueDescription();
whiteDescription.setLanguage(en);
whiteDescription.setName("White");
whiteDescription.setDescription("White color");
whiteDescription.setProductOptionValue(white);
white.getDescriptions().add(whiteDescription);
productOptionValueService.saveOrUpdate(white);
ProductOptionValue black = new ProductOptionValue();
black.setMerchantStore(merchant);
black.setCode("black");
/**
* second option value *
*/
ProductOptionValueDescription blackDesc = new ProductOptionValueDescription();
blackDesc.setLanguage(en);
blackDesc.setName("Black");
blackDesc.setDescription("Black color");
blackDesc.setProductOptionValue(black);
black.getDescriptions().add(blackDesc);
productOptionValueService.saveOrUpdate(black);
/**
* Create a complex product
*/
Product product = new Product();
product.setProductHeight(new BigDecimal(4));
product.setProductLength(new BigDecimal(3));
product.setProductWidth(new BigDecimal(1));
product.setSku("TB12345");
product.setManufacturer(addidas);
product.setType(generalType);
product.setMerchantStore(merchant);
// Product description
ProductDescription description = new ProductDescription();
description.setName("Short sleeves shirt");
description.setLanguage(en);
description.setProduct(product);
product.getDescriptions().add(description);
product.getCategories().add(shirts);
// availability
ProductAvailability availability = new ProductAvailability();
availability.setProductDateAvailable(new Date());
availability.setProductQuantity(100);
availability.setRegion("*");
// associate with product
availability.setProduct(product);
// price
ProductPrice dprice = new ProductPrice();
dprice.setDefaultPrice(true);
dprice.setProductPriceAmount(new BigDecimal(29.99));
dprice.setProductAvailability(availability);
ProductPriceDescription dpd = new ProductPriceDescription();
dpd.setName("Base price");
dpd.setProductPrice(dprice);
dpd.setLanguage(en);
dprice.getDescriptions().add(dpd);
availability.getPrices().add(dprice);
product.getAvailabilities().add(availability);
// attributes
// white
ProductAttribute whiteAttribute = new ProductAttribute();
whiteAttribute.setProduct(product);
whiteAttribute.setProductOption(option);
whiteAttribute.setAttributeDefault(true);
// no price variation
whiteAttribute.setProductAttributePrice(new BigDecimal(0));
// no weight variation
whiteAttribute.setProductAttributeWeight(new BigDecimal(0));
whiteAttribute.setProductOption(option);
whiteAttribute.setProductOptionValue(white);
product.getAttributes().add(whiteAttribute);
// black
ProductAttribute blackAttribute = new ProductAttribute();
blackAttribute.setProduct(product);
blackAttribute.setProductOption(option);
// 5 + dollars
blackAttribute.setProductAttributePrice(new BigDecimal(5));
// no weight variation
blackAttribute.setProductAttributeWeight(new BigDecimal(0));
blackAttribute.setProductOption(option);
blackAttribute.setProductOptionValue(black);
product.getAttributes().add(blackAttribute);
productService.create(product);
/**
* Create an order *
*/
Order order = new Order();
/**
* payment details *
*/
CreditCard creditCard = new CreditCard();
creditCard.setCardType(CreditCardType.VISA);
creditCard.setCcCvv("123");
creditCard.setCcExpires("12/30/2020");
creditCard.setCcNumber("123456789");
creditCard.setCcOwner("ccOwner");
order.setCreditCard(creditCard);
/**
* order core attributes *
*/
order.setDatePurchased(new Date());
order.setCurrency(currency);
order.setMerchant(merchant);
order.setLastModified(new Date());
// no price variation because of the currency
order.setCurrencyValue(new BigDecimal(1));
order.setCustomerId(1L);
order.setDelivery(delivery);
order.setIpAddress("ipAddress");
order.setMerchant(merchant);
order.setOrderDateFinished(new Date());
order.setPaymentType(PaymentType.CREDITCARD);
order.setPaymentModuleCode("payment Module Code");
order.setShippingModuleCode("UPS");
order.setStatus(OrderStatus.ORDERED);
order.setCustomerAgreement(true);
order.setConfirmedAddress(true);
order.setTotal(dprice.getProductPriceAmount());
order.setCustomerEmailAddress(customer.getEmailAddress());
order.setBilling(billing);
order.setDelivery(delivery);
/**
* ORDER PRODUCT *
*/
// OrderProduct
OrderProduct oproduct = new OrderProduct();
oproduct.setDownloads(null);
oproduct.setOneTimeCharge(dprice.getProductPriceAmount());
oproduct.setOrder(order);
oproduct.setProductName(description.getName());
oproduct.setProductQuantity(1);
oproduct.setSku(product.getSku());
// set order product price
OrderProductPrice orderProductPrice = new OrderProductPrice();
// default price (same as default product price)
orderProductPrice.setDefaultPrice(true);
orderProductPrice.setOrderProduct(oproduct);
orderProductPrice.setProductPrice(dprice.getProductPriceAmount());
orderProductPrice.setProductPriceCode(ProductPriceType.ONE_TIME.name());
oproduct.getPrices().add(orderProductPrice);
// order product attribute
OrderProductAttribute orderProductAttribute = new OrderProductAttribute();
orderProductAttribute.setOrderProduct(oproduct);
// no extra charge
orderProductAttribute.setProductAttributePrice(new BigDecimal("0.00"));
orderProductAttribute.setProductAttributeName(whiteDescription.getName());
orderProductAttribute.setProductOptionId(option.getId());
orderProductAttribute.setProductOptionValueId(white.getId());
oproduct.getOrderAttributes().add(orderProductAttribute);
order.getOrderProducts().add(oproduct);
/**
* ORDER TOTAL *
*/
OrderTotal subTotal = new OrderTotal();
subTotal.setOrder(order);
subTotal.setOrderTotalCode(Constants.OT_SUBTOTAL_MODULE_CODE);
subTotal.setSortOrder(0);
subTotal.setTitle("Sub Total");
subTotal.setValue(dprice.getProductPriceAmount());
order.getOrderTotal().add(subTotal);
OrderTotal total = new OrderTotal();
total.setOrder(order);
total.setOrderTotalCode(Constants.OT_TOTAL_MODULE_CODE);
total.setSortOrder(1);
total.setTitle("Total");
total.setValue(dprice.getProductPriceAmount());
order.getOrderTotal().add(total);
/**
* ORDER HISTORY *
*/
// create a log entry in order history
OrderStatusHistory history = new OrderStatusHistory();
history.setOrder(order);
history.setDateAdded(new Date());
history.setStatus(OrderStatus.ORDERED);
history.setComments("We received your order");
order.getOrderHistory().add(history);
/**
* CREATE ORDER *
*/
orderService.create(order);
/**
* SEARCH ORDERS *
*/
OrderCriteria criteria = new OrderCriteria();
criteria.setStartIndex(0);
criteria.setMaxCount(10);
OrderList ordserList = orderService.listByStore(merchant, criteria);
Assert.assertNotNull(ordserList);
Assert.assertNotNull("Merchant Orders are null.", ordserList.getOrders());
Assert.assertTrue("Merchant Orders count is not one.", (ordserList.getOrders() != null && ordserList.getOrders().size() == 1));
}
use of com.salesmanager.core.model.reference.zone.Zone in project shopizer by shopizer-ecommerce.
the class ShippingDistanceProcessorTest method testDistance.
@Ignore
public void testDistance() throws Exception {
ShippingQuote shippingQuote = new ShippingQuote();
Delivery delivery = new Delivery();
delivery.setAddress("2055 Peel Street");
delivery.setCity("Montreal");
delivery.setPostalCode("H3A 1V4");
Country country = new Country();
country.setIsoCode("CA");
country.setName("Canada");
delivery.setCountry(country);
Zone zone = new Zone();
zone.setCode("QC");
zone.setName("Quebec");
delivery.setZone(zone);
ShippingOrigin origin = new ShippingOrigin();
origin.setAddress("7070, avenue Henri-Julien");
origin.setCity("Montreal");
origin.setPostalCode("H2S 3S3");
origin.setZone(zone);
origin.setCountry(country);
// shippingDecisionTablePreProcessor.prePostProcessShippingQuotes(shippingQuote, null, null, delivery, origin, null, null, null, null, null, Locale.CANADA);
System.out.println(delivery.getLatitude());
System.out.println(delivery.getLongitude());
// System.out.println(shippingQuote.getQuoteInformations().get(Constants.DISTANCE_KEY));
}
use of com.salesmanager.core.model.reference.zone.Zone in project shopizer by shopizer-ecommerce.
the class TaxServiceImpl method calculateTax.
@Override
public List<TaxItem> calculateTax(OrderSummary orderSummary, Customer customer, MerchantStore store, Language language) throws ServiceException {
if (customer == null) {
return null;
}
List<ShoppingCartItem> items = orderSummary.getProducts();
List<TaxItem> taxLines = new ArrayList<TaxItem>();
if (items == null) {
return taxLines;
}
// determine tax calculation basis
TaxConfiguration taxConfiguration = this.getTaxConfiguration(store);
if (taxConfiguration == null) {
taxConfiguration = new TaxConfiguration();
taxConfiguration.setTaxBasisCalculation(TaxBasisCalculation.SHIPPINGADDRESS);
}
Country country = customer.getBilling().getCountry();
Zone zone = customer.getBilling().getZone();
String stateProvince = customer.getBilling().getState();
TaxBasisCalculation taxBasisCalculation = taxConfiguration.getTaxBasisCalculation();
if (taxBasisCalculation.name().equals(TaxBasisCalculation.SHIPPINGADDRESS)) {
Delivery shipping = customer.getDelivery();
if (shipping != null) {
country = shipping.getCountry();
zone = shipping.getZone();
stateProvince = shipping.getState();
}
} else if (taxBasisCalculation.name().equals(TaxBasisCalculation.BILLINGADDRESS)) {
Billing billing = customer.getBilling();
if (billing != null) {
country = billing.getCountry();
zone = billing.getZone();
stateProvince = billing.getState();
}
} else if (taxBasisCalculation.name().equals(TaxBasisCalculation.STOREADDRESS)) {
country = store.getCountry();
zone = store.getZone();
stateProvince = store.getStorestateprovince();
}
// do not collect tax on other provinces of same country
if (!taxConfiguration.isCollectTaxIfDifferentProvinceOfStoreCountry()) {
if ((zone != null && store.getZone() != null) && (zone.getId().longValue() != store.getZone().getId().longValue())) {
return null;
}
if (!StringUtils.isBlank(stateProvince)) {
if (store.getZone() != null) {
if (!store.getZone().getName().equals(stateProvince)) {
return null;
}
} else if (!StringUtils.isBlank(store.getStorestateprovince())) {
if (!store.getStorestateprovince().equals(stateProvince)) {
return null;
}
}
}
}
// collect tax in different countries
if (taxConfiguration.isCollectTaxIfDifferentCountryOfStoreCountry()) {
// use store country
country = store.getCountry();
zone = store.getZone();
stateProvince = store.getStorestateprovince();
}
if (zone == null && StringUtils.isBlank(stateProvince)) {
return null;
}
Map<Long, TaxClass> taxClasses = new HashMap<Long, TaxClass>();
// put items in a map by tax class id
Map<Long, BigDecimal> taxClassAmountMap = new HashMap<Long, BigDecimal>();
for (ShoppingCartItem item : items) {
BigDecimal itemPrice = item.getItemPrice();
TaxClass taxClass = item.getProduct().getTaxClass();
int quantity = item.getQuantity();
itemPrice = itemPrice.multiply(new BigDecimal(quantity));
if (taxClass == null) {
taxClass = taxClassService.getByCode(DEFAULT_TAX_CLASS);
}
BigDecimal subTotal = taxClassAmountMap.get(taxClass.getId());
if (subTotal == null) {
subTotal = new BigDecimal(0);
subTotal.setScale(2, RoundingMode.HALF_UP);
}
subTotal = subTotal.add(itemPrice);
taxClassAmountMap.put(taxClass.getId(), subTotal);
taxClasses.put(taxClass.getId(), taxClass);
}
// tax on shipping ?
// ShippingConfiguration shippingConfiguration = shippingService.getShippingConfiguration(store);
/**
* always calculate tax on shipping *
*/
// if(shippingConfiguration!=null) {
// if(shippingConfiguration.isTaxOnShipping()){
// use default tax class for shipping
TaxClass defaultTaxClass = taxClassService.getByCode(TaxClass.DEFAULT_TAX_CLASS);
// taxClasses.put(defaultTaxClass.getId(), defaultTaxClass);
BigDecimal amnt = taxClassAmountMap.get(defaultTaxClass.getId());
if (amnt == null) {
amnt = new BigDecimal(0);
amnt.setScale(2, RoundingMode.HALF_UP);
}
ShippingSummary shippingSummary = orderSummary.getShippingSummary();
if (shippingSummary != null && shippingSummary.getShipping() != null && shippingSummary.getShipping().doubleValue() > 0) {
amnt = amnt.add(shippingSummary.getShipping());
if (shippingSummary.getHandling() != null && shippingSummary.getHandling().doubleValue() > 0) {
amnt = amnt.add(shippingSummary.getHandling());
}
}
taxClassAmountMap.put(defaultTaxClass.getId(), amnt);
// }
// }
List<TaxItem> taxItems = new ArrayList<TaxItem>();
// iterate through the tax class and get appropriate rates
for (Long taxClassId : taxClassAmountMap.keySet()) {
// get taxRate by tax class
List<TaxRate> taxRates = null;
if (!StringUtils.isBlank(stateProvince) && zone == null) {
taxRates = taxRateService.listByCountryStateProvinceAndTaxClass(country, stateProvince, taxClasses.get(taxClassId), store, language);
} else {
taxRates = taxRateService.listByCountryZoneAndTaxClass(country, zone, taxClasses.get(taxClassId), store, language);
}
if (taxRates == null || taxRates.size() == 0) {
continue;
}
BigDecimal taxedItemValue = null;
BigDecimal totalTaxedItemValue = new BigDecimal(0);
totalTaxedItemValue.setScale(2, RoundingMode.HALF_UP);
BigDecimal beforeTaxeAmount = taxClassAmountMap.get(taxClassId);
for (TaxRate taxRate : taxRates) {
// 5% ... 8% ...
double taxRateDouble = taxRate.getTaxRate().doubleValue();
if (taxRate.isPiggyback()) {
// (compound)
if (totalTaxedItemValue.doubleValue() > 0) {
beforeTaxeAmount = totalTaxedItemValue;
}
}
// else just use nominal taxing (combine)
double value = (beforeTaxeAmount.doubleValue() * taxRateDouble) / 100;
double roundedValue = new BigDecimal(value).setScale(2, RoundingMode.HALF_UP).doubleValue();
taxedItemValue = new BigDecimal(roundedValue).setScale(2, RoundingMode.HALF_UP);
totalTaxedItemValue = beforeTaxeAmount.add(taxedItemValue);
TaxItem taxItem = new TaxItem();
taxItem.setItemPrice(taxedItemValue);
taxItem.setLabel(taxRate.getDescriptions().get(0).getName());
taxItem.setTaxRate(taxRate);
taxItems.add(taxItem);
}
}
Map<String, TaxItem> taxItemsMap = new TreeMap<String, TaxItem>();
// consolidate tax rates of same code
for (TaxItem taxItem : taxItems) {
TaxRate taxRate = taxItem.getTaxRate();
if (!taxItemsMap.containsKey(taxRate.getCode())) {
taxItemsMap.put(taxRate.getCode(), taxItem);
}
TaxItem item = taxItemsMap.get(taxRate.getCode());
BigDecimal amount = item.getItemPrice();
amount = amount.add(taxItem.getItemPrice());
}
if (taxItemsMap.size() == 0) {
return null;
}
@SuppressWarnings("rawtypes") Collection<TaxItem> values = taxItemsMap.values();
@SuppressWarnings("unchecked") List<TaxItem> list = new ArrayList<TaxItem>(values);
return list;
}
Aggregations