package com.salesmanager.core.business.services.shipping; import java.util.List; import java.util.Map; import com.salesmanager.core.business.exception.ServiceException; import com.salesmanager.core.model.common.Delivery; import com.salesmanager.core.model.merchant.MerchantStore; import com.salesmanager.core.model.reference.country.Country; import com.salesmanager.core.model.reference.language.Language; import com.salesmanager.core.model.shipping.PackageDetails; import com.salesmanager.core.model.shipping.ShippingConfiguration; import com.salesmanager.core.model.shipping.ShippingMetaData; import com.salesmanager.core.model.shipping.ShippingOption; import com.salesmanager.core.model.shipping.ShippingProduct; import com.salesmanager.core.model.shipping.ShippingQuote; import com.salesmanager.core.model.shipping.ShippingSummary; import com.salesmanager.core.model.shoppingcart.ShoppingCartItem; import com.salesmanager.core.model.system.CustomIntegrationConfiguration; import com.salesmanager.core.model.system.IntegrationConfiguration; import com.salesmanager.core.model.system.IntegrationModule; public interface ShippingService { /** * Returns a list of supported countries (ship to country list) configured by merchant * when the merchant configured shipping National and has saved a list of ship to country * from the list * @param store * @return * @throws ServiceException */ public List<String> getSupportedCountries(MerchantStore store) throws ServiceException; public void setSupportedCountries(MerchantStore store, List<String> countryCodes) throws ServiceException; /** * Returns a list of available shipping modules * @param store * @return * @throws ServiceException */ public List<IntegrationModule> getShippingMethods(MerchantStore store) throws ServiceException; /** * Returns a list of configured shipping modules for a given merchant * @param store * @return * @throws ServiceException */ Map<String, IntegrationConfiguration> getShippingModulesConfigured( MerchantStore store) throws ServiceException; /** * Adds a Shipping configuration * @param configuration * @param store * @throws ServiceException */ void saveShippingQuoteModuleConfiguration(IntegrationConfiguration configuration, MerchantStore store) throws ServiceException; /** * ShippingType (NATIONAL, INTERNATIONSL) * ShippingBasisType (SHIPPING, BILLING) * ShippingPriceOptionType (ALL, LEAST, HIGHEST) * Packages * Handling * @param store * @return * @throws ServiceException */ ShippingConfiguration getShippingConfiguration(MerchantStore store) throws ServiceException; /** * Saves ShippingConfiguration for a given MerchantStore * @param shippingConfiguration * @param store * @throws ServiceException */ void saveShippingConfiguration(ShippingConfiguration shippingConfiguration, MerchantStore store) throws ServiceException; void removeShippingQuoteModuleConfiguration(String moduleCode, MerchantStore store) throws ServiceException; /** * Provides detailed information on boxes that will be used * when getting a ShippingQuote * @param products * @param store * @return * @throws ServiceException */ List<PackageDetails> getPackagesDetails(List<ShippingProduct> products, MerchantStore store) throws ServiceException; /** * Get a list of ShippingQuote from a configured * shipping gateway. The quotes are displayed to the end user so he can pick * the ShippingOption he wants * @param store * @param customer * @param products * @param language * @return * @throws ServiceException */ ShippingQuote getShippingQuote(MerchantStore store, Delivery delivery, List<ShippingProduct> products, Language language) throws ServiceException; /** * Returns a shipping module configuration given a moduleCode * @param moduleCode * @param store * @return * @throws ServiceException */ IntegrationConfiguration getShippingConfiguration(String moduleCode, MerchantStore store) throws ServiceException; /** * Retrieves the custom configuration for a given module * @param moduleCode * @param store * @return * @throws ServiceException */ CustomIntegrationConfiguration getCustomShippingConfiguration( String moduleCode, MerchantStore store) throws ServiceException; /** * Weight based configuration * @param moduleCode * @param shippingConfiguration * @param store * @throws ServiceException */ void saveCustomShippingConfiguration(String moduleCode, CustomIntegrationConfiguration shippingConfiguration, MerchantStore store) throws ServiceException; /** * Removes a custom shipping quote * module * @param moduleCode * @param store * @throws ServiceException */ void removeCustomShippingQuoteModuleConfiguration(String moduleCode, MerchantStore store) throws ServiceException; /** * The {@link ShippingSummary} is built from the ShippingOption the user has selected * The ShippingSummary is used for order calculation * @param store * @param shippingQuote * @param selectedShippingOption * @return * @throws ServiceException */ ShippingSummary getShippingSummary(MerchantStore store, ShippingQuote shippingQuote, ShippingOption selectedShippingOption) throws ServiceException; /** * Returns a list of supported countries (ship to country list) configured by merchant * If the merchant configured shipping National, then only store country will be in the list * If the merchant configured shipping International, then the list of accepted country is returned * from the list * @param store * @param language * @return * @throws ServiceException */ List<Country> getShipToCountryList(MerchantStore store, Language language) throws ServiceException; /** * Determines if Shipping should be proposed to the customer * @param items * @param store * @return * @throws ServiceException */ boolean requiresShipping(List<ShoppingCartItem> items, MerchantStore store) throws ServiceException; /** * Returns shipping metadata and how shipping is configured for a given store * @param store * @return * @throws ServiceException */ ShippingMetaData getShippingMetaData(MerchantStore store) throws ServiceException; }