Search in sources :

Example 6 with PackageDetails

use of com.salesmanager.core.model.shipping.PackageDetails in project shopizer by shopizer-ecommerce.

the class PackingBox method getItemPackagesDetails.

@Override
public List<PackageDetails> getItemPackagesDetails(List<ShippingProduct> products, MerchantStore store) throws ServiceException {
    List<PackageDetails> packages = new ArrayList<PackageDetails>();
    for (ShippingProduct shippingProduct : products) {
        Product product = shippingProduct.getProduct();
        if (product.isProductVirtual()) {
            continue;
        }
        // BigDecimal weight = product.getProductWeight();
        Set<ProductAttribute> attributes = product.getAttributes();
        // set attributes values
        BigDecimal w = product.getProductWeight();
        BigDecimal h = product.getProductHeight();
        BigDecimal l = product.getProductLength();
        BigDecimal wd = product.getProductWidth();
        if (w == null) {
            w = new BigDecimal(defaultWeight);
        }
        if (h == null) {
            h = new BigDecimal(defaultHeight);
        }
        if (l == null) {
            l = new BigDecimal(defaultLength);
        }
        if (wd == null) {
            wd = new BigDecimal(defaultWidth);
        }
        if (attributes != null && attributes.size() > 0) {
            for (ProductAttribute attribute : attributes) {
                if (attribute.getAttributeAdditionalWeight() != null && attribute.getProductAttributeWeight() != null) {
                    w = w.add(attribute.getProductAttributeWeight());
                }
            }
        }
        if (shippingProduct.getQuantity() == 1) {
            PackageDetails detail = new PackageDetails();
            detail.setShippingHeight(h.doubleValue());
            detail.setShippingLength(l.doubleValue());
            detail.setShippingWeight(w.doubleValue());
            detail.setShippingWidth(wd.doubleValue());
            detail.setShippingQuantity(shippingProduct.getQuantity());
            String description = "item";
            if (product.getDescriptions().size() > 0) {
                description = product.getDescriptions().iterator().next().getName();
            }
            detail.setItemName(description);
            packages.add(detail);
        } else if (shippingProduct.getQuantity() > 1) {
            for (int i = 0; i < shippingProduct.getQuantity(); i++) {
                PackageDetails detail = new PackageDetails();
                detail.setShippingHeight(h.doubleValue());
                detail.setShippingLength(l.doubleValue());
                detail.setShippingWeight(w.doubleValue());
                detail.setShippingWidth(wd.doubleValue());
                // issue seperate shipping
                detail.setShippingQuantity(1);
                String description = "item";
                if (product.getDescriptions().size() > 0) {
                    description = product.getDescriptions().iterator().next().getName();
                }
                detail.setItemName(description);
                packages.add(detail);
            }
        }
    }
    return packages;
}
Also used : ArrayList(java.util.ArrayList) ShippingProduct(com.salesmanager.core.model.shipping.ShippingProduct) Product(com.salesmanager.core.model.catalog.product.Product) ShippingProduct(com.salesmanager.core.model.shipping.ShippingProduct) ProductAttribute(com.salesmanager.core.model.catalog.product.attribute.ProductAttribute) PackageDetails(com.salesmanager.core.model.shipping.PackageDetails) BigDecimal(java.math.BigDecimal)

Example 7 with PackageDetails

use of com.salesmanager.core.model.shipping.PackageDetails in project shopizer by shopizer-ecommerce.

the class ShippingDecisionPreProcessorImpl method prePostProcessShippingQuotes.

// private StatelessKnowledgeSession shippingMethodDecision;
// private KnowledgeBase kbase;
// @Inject
// KieContainer kieShippingDecisionContainer;
@Override
public void prePostProcessShippingQuotes(ShippingQuote quote, List<PackageDetails> packages, BigDecimal orderTotal, Delivery delivery, ShippingOrigin origin, MerchantStore store, IntegrationConfiguration globalShippingConfiguration, IntegrationModule currentModule, ShippingConfiguration shippingConfiguration, List<IntegrationModule> allModules, Locale locale) throws IntegrationException {
    Validate.notNull(delivery, "Delivery cannot be null");
    Validate.notNull(currentModule, "IntegrationModule cannot be null");
    Validate.notNull(delivery.getCountry(), "Delivery.country cannot be null");
    Validate.notNull(allModules, "List<IntegrationModule> cannot be null");
    Validate.notNull(packages, "packages cannot be null");
    Validate.notEmpty(packages, "packages cannot be empty");
    Double distance = null;
    if (quote != null) {
        // look if distance has been calculated
        if (quote.getQuoteInformations() != null) {
            if (quote.getQuoteInformations().containsKey(Constants.DISTANCE_KEY)) {
                distance = (Double) quote.getQuoteInformations().get(Constants.DISTANCE_KEY);
            }
        }
    }
    // calculate volume (L x W x H)
    Double volume = null;
    Double weight = 0D;
    Double size = null;
    // calculate weight, volume and largest size
    for (PackageDetails pack : packages) {
        weight = weight + pack.getShippingWeight();
        Double tmpVolume = pack.getShippingHeight() * pack.getShippingLength() * pack.getShippingWidth();
        if (volume == null || tmpVolume > volume) {
            // take the largest volume
            volume = tmpVolume;
        }
        // largest size
        List<Double> sizeList = new ArrayList<Double>();
        sizeList.add(pack.getShippingHeight());
        sizeList.add(pack.getShippingLength());
        sizeList.add(pack.getShippingWidth());
        Double maxSize = Collections.max(sizeList);
        if (size == null || maxSize > size) {
            size = maxSize;
        }
    }
    // Build a ShippingInputParameters
    ShippingInputParameters inputParameters = new ShippingInputParameters();
    inputParameters.setWeight((long) weight.doubleValue());
    inputParameters.setCountry(delivery.getCountry().getIsoCode());
    if (delivery.getZone() != null && delivery.getZone().getCode() != null) {
        inputParameters.setProvince(delivery.getZone().getCode());
    } else {
        inputParameters.setProvince(delivery.getState());
    }
    if (size != null) {
        inputParameters.setSize((long) size.doubleValue());
    }
    if (distance != null) {
        double ddistance = distance;
        long ldistance = (long) ddistance;
        inputParameters.setDistance(ldistance);
    }
    if (volume != null) {
        inputParameters.setVolume((long) volume.doubleValue());
    }
    LOGGER.debug("Setting input parameters " + inputParameters.toString());
    System.out.println(inputParameters.toString());
    /**
     * New code
     */
    KieSession kieSession = droolsBeanFactory.getKieSession(ResourceFactory.newClassPathResource("com/salesmanager/drools/rules/ShippingDecision.drl"));
    DecisionResponse resp = new DecisionResponse();
    kieSession.insert(inputParameters);
    kieSession.setGlobal("decision", resp);
    kieSession.fireAllRules();
    // System.out.println(resp.getModuleName());
    inputParameters.setModuleName(resp.getModuleName());
    LOGGER.debug("Using shipping nodule " + inputParameters.getModuleName());
    if (!StringUtils.isBlank(inputParameters.getModuleName())) {
        for (IntegrationModule toBeUsed : allModules) {
            if (toBeUsed.getCode().equals(inputParameters.getModuleName())) {
                quote.setCurrentShippingModule(toBeUsed);
                break;
            }
        }
    }
}
Also used : ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) PackageDetails(com.salesmanager.core.model.shipping.PackageDetails) IntegrationModule(com.salesmanager.core.model.system.IntegrationModule)

Example 8 with PackageDetails

use of com.salesmanager.core.model.shipping.PackageDetails in project shopizer by shopizer-ecommerce.

the class UPSParsedElements method getShippingQuotes.

@Override
public List<ShippingOption> getShippingQuotes(ShippingQuote shippingQuote, List<PackageDetails> packages, BigDecimal orderTotal, Delivery delivery, ShippingOrigin origin, MerchantStore store, IntegrationConfiguration configuration, IntegrationModule module, ShippingConfiguration shippingConfiguration, Locale locale) throws IntegrationException {
    Validate.notNull(configuration, "IntegrationConfiguration must not be null for USPS shipping module");
    if (StringUtils.isBlank(delivery.getPostalCode())) {
        return null;
    }
    BigDecimal total = orderTotal;
    if (packages == null) {
        return null;
    }
    List<ShippingOption> options = null;
    // only applies to Canada and US
    Country country = delivery.getCountry();
    if (!(country.getIsoCode().equals("US") || country.getIsoCode().equals("CA"))) {
        return null;
    // throw new IntegrationException("UPS Not configured for shipping in country " + country.getIsoCode());
    }
    // supports en and fr
    String language = locale.getLanguage();
    if (!language.equals(Locale.FRENCH.getLanguage()) && !language.equals(Locale.ENGLISH.getLanguage())) {
        language = Locale.ENGLISH.getLanguage();
    }
    String pack = configuration.getIntegrationOptions().get("packages").get(0);
    Map<String, String> keys = configuration.getIntegrationKeys();
    String accessKey = keys.get("accessKey");
    String userId = keys.get("userId");
    String password = keys.get("password");
    String host = null;
    String protocol = null;
    String port = null;
    String url = null;
    StringBuilder xmlbuffer = new StringBuilder();
    HttpPost httppost = null;
    BufferedReader reader = null;
    try {
        String env = configuration.getEnvironment();
        Set<String> regions = module.getRegionsSet();
        if (!regions.contains(store.getCountry().getIsoCode())) {
            throw new IntegrationException("Can't use the service for store country code ");
        }
        Map<String, ModuleConfig> moduleConfigsMap = module.getModuleConfigs();
        for (String key : moduleConfigsMap.keySet()) {
            ModuleConfig moduleConfig = moduleConfigsMap.get(key);
            if (moduleConfig.getEnv().equals(env)) {
                host = moduleConfig.getHost();
                protocol = moduleConfig.getScheme();
                port = moduleConfig.getPort();
                url = moduleConfig.getUri();
            }
        }
        StringBuilder xmlreqbuffer = new StringBuilder();
        xmlreqbuffer.append("<?xml version=\"1.0\"?>");
        xmlreqbuffer.append("<AccessRequest>");
        xmlreqbuffer.append("<AccessLicenseNumber>");
        xmlreqbuffer.append(accessKey);
        xmlreqbuffer.append("</AccessLicenseNumber>");
        xmlreqbuffer.append("<UserId>");
        xmlreqbuffer.append(userId);
        xmlreqbuffer.append("</UserId>");
        xmlreqbuffer.append("<Password>");
        xmlreqbuffer.append(password);
        xmlreqbuffer.append("</Password>");
        xmlreqbuffer.append("</AccessRequest>");
        String xmlhead = xmlreqbuffer.toString();
        String weightCode = store.getWeightunitcode();
        String measureCode = store.getSeizeunitcode();
        if (weightCode.equals("KG")) {
            weightCode = "KGS";
        } else {
            weightCode = "LBS";
        }
        String xml = "<?xml version=\"1.0\"?><RatingServiceSelectionRequest><Request><TransactionReference><CustomerContext>Shopizer</CustomerContext><XpciVersion>1.0001</XpciVersion></TransactionReference><RequestAction>Rate</RequestAction><RequestOption>Shop</RequestOption></Request>";
        StringBuilder xmldatabuffer = new StringBuilder();
        /**
         * <Shipment>
         *
         * <Shipper> <Address> <City></City>
         * <StateProvinceCode>QC</StateProvinceCode>
         * <CountryCode>CA</CountryCode> <PostalCode></PostalCode>
         * </Address> </Shipper>
         *
         * <ShipTo> <Address> <City>Redwood Shores</City>
         * <StateProvinceCode>CA</StateProvinceCode>
         * <CountryCode>US</CountryCode> <PostalCode></PostalCode>
         * <ResidentialAddressIndicator/> </Address> </ShipTo>
         *
         * <Package> <PackagingType> <Code>21</Code> </PackagingType>
         * <PackageWeight> <UnitOfMeasurement> <Code>LBS</Code>
         * </UnitOfMeasurement> <Weight>1.1</Weight> </PackageWeight>
         * <PackageServiceOptions> <InsuredValue>
         * <CurrencyCode>CAD</CurrencyCode>
         * <MonetaryValue>100</MonetaryValue> </InsuredValue>
         * </PackageServiceOptions> </Package>
         *
         * </Shipment>
         *
         * <CustomerClassification> <Code>03</Code>
         * </CustomerClassification> </RatingServiceSelectionRequest>
         * *
         */
        /**
         *Map countriesMap = (Map) RefCache.getAllcountriesmap(LanguageUtil
         *					.getLanguageNumberCode(locale.getLanguage()));
         *			Map zonesMap = (Map) RefCache.getAllZonesmap(LanguageUtil
         *					.getLanguageNumberCode(locale.getLanguage()));
         *
         *			Country storeCountry = (Country) countriesMap.get(store
         *					.getCountry());
         *
         *			Country customerCountry = (Country) countriesMap.get(customer
         *					.getCustomerCountryId());
         *
         *			int sZone = -1;
         *			try {
         *				sZone = Integer.parseInt(store.getZone());
         *			} catch (Exception e) {
         *				// TODO: handle exception
         *			}
         *
         *			Zone storeZone = (Zone) zonesMap.get(sZone);
         *			Zone customerZone = (Zone) zonesMap.get(customer
         *					.getCustomerZoneId());*
         */
        xmldatabuffer.append("<PickupType><Code>03</Code></PickupType>");
        // xmldatabuffer.append("<Description>Daily Pickup</Description>");
        xmldatabuffer.append("<Shipment><Shipper>");
        xmldatabuffer.append("<Address>");
        xmldatabuffer.append("<City>");
        xmldatabuffer.append(store.getStorecity());
        xmldatabuffer.append("</City>");
        // if(!StringUtils.isBlank(store.getStorestateprovince())) {
        if (store.getZone() != null) {
            xmldatabuffer.append("<StateProvinceCode>");
            // zone code
            xmldatabuffer.append(store.getZone().getCode());
            xmldatabuffer.append("</StateProvinceCode>");
        }
        xmldatabuffer.append("<CountryCode>");
        xmldatabuffer.append(store.getCountry().getIsoCode());
        xmldatabuffer.append("</CountryCode>");
        xmldatabuffer.append("<PostalCode>");
        xmldatabuffer.append(DataUtils.trimPostalCode(store.getStorepostalcode()));
        xmldatabuffer.append("</PostalCode></Address></Shipper>");
        // ship to
        xmldatabuffer.append("<ShipTo>");
        xmldatabuffer.append("<Address>");
        xmldatabuffer.append("<City>");
        xmldatabuffer.append(delivery.getCity());
        xmldatabuffer.append("</City>");
        // if(!StringUtils.isBlank(customer.getCustomerState())) {
        if (delivery.getZone() != null) {
            xmldatabuffer.append("<StateProvinceCode>");
            // zone code
            xmldatabuffer.append(delivery.getZone().getCode());
            xmldatabuffer.append("</StateProvinceCode>");
        }
        xmldatabuffer.append("<CountryCode>");
        xmldatabuffer.append(delivery.getCountry().getIsoCode());
        xmldatabuffer.append("</CountryCode>");
        xmldatabuffer.append("<PostalCode>");
        xmldatabuffer.append(DataUtils.trimPostalCode(delivery.getPostalCode()));
        xmldatabuffer.append("</PostalCode></Address></ShipTo>");
        for (PackageDetails packageDetail : packages) {
            xmldatabuffer.append("<Package>");
            xmldatabuffer.append("<PackagingType>");
            xmldatabuffer.append("<Code>");
            xmldatabuffer.append(pack);
            xmldatabuffer.append("</Code>");
            xmldatabuffer.append("</PackagingType>");
            // weight
            xmldatabuffer.append("<PackageWeight>");
            xmldatabuffer.append("<UnitOfMeasurement>");
            xmldatabuffer.append("<Code>");
            xmldatabuffer.append(weightCode);
            xmldatabuffer.append("</Code>");
            xmldatabuffer.append("</UnitOfMeasurement>");
            xmldatabuffer.append("<Weight>");
            xmldatabuffer.append(new BigDecimal(packageDetail.getShippingWeight()).setScale(1, BigDecimal.ROUND_HALF_UP));
            xmldatabuffer.append("</Weight>");
            xmldatabuffer.append("</PackageWeight>");
            // dimension
            xmldatabuffer.append("<Dimensions>");
            xmldatabuffer.append("<UnitOfMeasurement>");
            xmldatabuffer.append("<Code>");
            xmldatabuffer.append(measureCode);
            xmldatabuffer.append("</Code>");
            xmldatabuffer.append("</UnitOfMeasurement>");
            xmldatabuffer.append("<Length>");
            xmldatabuffer.append(new BigDecimal(packageDetail.getShippingLength()).setScale(2, BigDecimal.ROUND_HALF_UP));
            xmldatabuffer.append("</Length>");
            xmldatabuffer.append("<Width>");
            xmldatabuffer.append(new BigDecimal(packageDetail.getShippingWidth()).setScale(2, BigDecimal.ROUND_HALF_UP));
            xmldatabuffer.append("</Width>");
            xmldatabuffer.append("<Height>");
            xmldatabuffer.append(new BigDecimal(packageDetail.getShippingHeight()).setScale(2, BigDecimal.ROUND_HALF_UP));
            xmldatabuffer.append("</Height>");
            xmldatabuffer.append("</Dimensions>");
            xmldatabuffer.append("</Package>");
        }
        xmldatabuffer.append("</Shipment>");
        xmldatabuffer.append("</RatingServiceSelectionRequest>");
        xmlbuffer.append(xmlhead).append(xml).append(xmldatabuffer.toString());
        LOGGER.debug("UPS QUOTE REQUEST " + xmlbuffer.toString());
        try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
            // HttpClient client = new HttpClient();
            httppost = new HttpPost(protocol + "://" + host + ":" + port + url);
            StringEntity entity = new StringEntity(xmlbuffer.toString(), ContentType.APPLICATION_ATOM_XML);
            // RequestEntity entity = new StringRequestEntity(
            // xmlbuffer.toString(), "text/plain", "UTF-8");
            httppost.setEntity(entity);
            // Create a custom response handler
            ResponseHandler<String> responseHandler = response -> {
                int status = response.getStatusLine().getStatusCode();
                if (status >= 200 && status < 300) {
                    HttpEntity entity1 = response.getEntity();
                    return entity1 != null ? EntityUtils.toString(entity1) : null;
                } else {
                    LOGGER.error("Communication Error with ups quote " + status);
                    throw new ClientProtocolException("UPS quote communication error " + status);
                }
            };
            String data = httpclient.execute(httppost, responseHandler);
            // int result = response.getStatusLine().getStatusCode();
            // int result = client.executeMethod(httppost);
            /*			if (result != 200) {
				LOGGER.error("Communication Error with ups quote " + result + " "
						+ protocol + "://" + host + ":" + port + url);
				throw new Exception("UPS quote communication error " + result);
			}*/
            LOGGER.debug("ups quote response " + data);
            UPSParsedElements parsed = new UPSParsedElements();
            Digester digester = new Digester();
            digester.push(parsed);
            digester.addCallMethod("RatingServiceSelectionResponse/Response/Error", "setErrorCode", 0);
            digester.addCallMethod("RatingServiceSelectionResponse/Response/ErrorDescriprion", "setError", 0);
            digester.addCallMethod("RatingServiceSelectionResponse/Response/ResponseStatusCode", "setStatusCode", 0);
            digester.addCallMethod("RatingServiceSelectionResponse/Response/ResponseStatusDescription", "setStatusMessage", 0);
            digester.addCallMethod("RatingServiceSelectionResponse/Response/Error/ErrorDescription", "setError", 0);
            digester.addObjectCreate("RatingServiceSelectionResponse/RatedShipment", ShippingOption.class);
            // digester.addSetProperties(
            // "RatingServiceSelectionResponse/RatedShipment", "sequence",
            // "optionId" );
            digester.addCallMethod("RatingServiceSelectionResponse/RatedShipment/Service/Code", "setOptionId", 0);
            digester.addCallMethod("RatingServiceSelectionResponse/RatedShipment/TotalCharges/MonetaryValue", "setOptionPriceText", 0);
            // digester
            // .addCallMethod(
            // "RatingServiceSelectionResponse/RatedShipment/TotalCharges/CurrencyCode",
            // "setCurrency", 0);
            digester.addCallMethod("RatingServiceSelectionResponse/RatedShipment/Service/Code", "setOptionCode", 0);
            digester.addCallMethod("RatingServiceSelectionResponse/RatedShipment/GuaranteedDaysToDelivery", "setEstimatedNumberOfDays", 0);
            digester.addSetNext("RatingServiceSelectionResponse/RatedShipment", "addOption");
            // <?xml
            // version="1.0"?><AddressValidationResponse><Response><TransactionReference><CustomerContext>SalesManager
            // Data</CustomerContext><XpciVersion>1.0</XpciVersion></TransactionReference><ResponseStatusCode>0</ResponseStatusCode><ResponseStatusDescription>Failure</ResponseStatusDescription><Error><ErrorSeverity>Hard</ErrorSeverity><ErrorCode>10002</ErrorCode><ErrorDescription>The
            // XML document is well formed but the document is not
            // valid</ErrorDescription><ErrorLocation><ErrorLocationElementName>AddressValidationRequest</ErrorLocationElementName></ErrorLocation></Error></Response></AddressValidationResponse>
            Reader xmlreader = new StringReader(data);
            digester.parse(xmlreader);
            if (!StringUtils.isBlank(parsed.getErrorCode())) {
                LOGGER.error("Can't process UPS statusCode=" + parsed.getErrorCode() + " message= " + parsed.getError());
                throw new IntegrationException(parsed.getError());
            }
            if (!StringUtils.isBlank(parsed.getStatusCode()) && !parsed.getStatusCode().equals("1")) {
                throw new IntegrationException(parsed.getError());
            }
            if (parsed.getOptions() == null || parsed.getOptions().size() == 0) {
                throw new IntegrationException("No shipping options available for the configuration");
            }
            /*String carrier = getShippingMethodDescription(locale);
			// cost is in CAD, need to do conversion

			boolean requiresCurrencyConversion = false; String storeCurrency
			 = store.getCurrency();
			if(!storeCurrency.equals(Constants.CURRENCY_CODE_CAD)) {
			 requiresCurrencyConversion = true; }

			LabelUtil labelUtil = LabelUtil.getInstance();
			Map serviceMap = com.salesmanager.core.util.ShippingUtil
					.buildServiceMap("upsxml", locale);

			*/
            /**
             * Details on whit RT quote information to display *
             */
            /*
			MerchantConfiguration rtdetails = config
					.getMerchantConfiguration(ShippingConstants.MODULE_SHIPPING_DISPLAY_REALTIME_QUOTES);
			int displayQuoteDeliveryTime = ShippingConstants.NO_DISPLAY_RT_QUOTE_TIME;
			if (rtdetails != null) {

				if (!StringUtils.isBlank(rtdetails.getConfigurationValue1())) {// display
																				// or
																				// not
																				// quotes
					try {
						displayQuoteDeliveryTime = Integer.parseInt(rtdetails
								.getConfigurationValue1());

					} catch (Exception e) {
						log.error("Display quote is not an integer value ["
								+ rtdetails.getConfigurationValue1() + "]");
					}
				}
			}*/
            List<ShippingOption> shippingOptions = parsed.getOptions();
            if (shippingOptions != null) {
                Map<String, String> details = module.getDetails();
                for (ShippingOption option : shippingOptions) {
                    String name = details.get(option.getOptionCode());
                    option.setOptionName(name);
                    if (option.getOptionPrice() == null) {
                        String priceText = option.getOptionPriceText();
                        if (StringUtils.isBlank(priceText)) {
                            throw new IntegrationException("Price text is null for option " + name);
                        }
                        try {
                            BigDecimal price = new BigDecimal(priceText);
                            option.setOptionPrice(price);
                        } catch (Exception e) {
                            throw new IntegrationException("Can't convert to numeric price " + priceText);
                        }
                    }
                }
            }
            return shippingOptions;
        }
    } catch (Exception e1) {
        LOGGER.error("UPS quote error", e1);
        throw new IntegrationException(e1);
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (Exception ignore) {
            }
        }
        if (httppost != null) {
            httppost.releaseConnection();
        }
    }
}
Also used : ClientProtocolException(org.apache.http.client.ClientProtocolException) HttpPost(org.apache.http.client.methods.HttpPost) ShippingOrigin(com.salesmanager.core.model.shipping.ShippingOrigin) DataUtils(com.salesmanager.core.business.utils.DataUtils) LoggerFactory(org.slf4j.LoggerFactory) Delivery(com.salesmanager.core.model.common.Delivery) StringUtils(org.apache.commons.lang3.StringUtils) ShippingQuote(com.salesmanager.core.model.shipping.ShippingQuote) ArrayList(java.util.ArrayList) EntityUtils(org.apache.http.util.EntityUtils) BigDecimal(java.math.BigDecimal) MerchantStore(com.salesmanager.core.model.merchant.MerchantStore) Locale(java.util.Locale) CustomIntegrationConfiguration(com.salesmanager.core.model.system.CustomIntegrationConfiguration) Map(java.util.Map) IntegrationModule(com.salesmanager.core.model.system.IntegrationModule) CloseableHttpClient(org.apache.http.impl.client.CloseableHttpClient) ShippingOption(com.salesmanager.core.model.shipping.ShippingOption) Logger(org.slf4j.Logger) Country(com.salesmanager.core.model.reference.country.Country) Digester(org.apache.commons.digester.Digester) HttpEntity(org.apache.http.HttpEntity) ContentType(org.apache.http.entity.ContentType) Set(java.util.Set) StringEntity(org.apache.http.entity.StringEntity) ModuleConfig(com.salesmanager.core.model.system.ModuleConfig) Reader(java.io.Reader) IntegrationException(com.salesmanager.core.modules.integration.IntegrationException) List(java.util.List) Validate(org.apache.commons.lang3.Validate) StringReader(java.io.StringReader) PackageDetails(com.salesmanager.core.model.shipping.PackageDetails) IntegrationConfiguration(com.salesmanager.core.model.system.IntegrationConfiguration) BufferedReader(java.io.BufferedReader) ShippingConfiguration(com.salesmanager.core.model.shipping.ShippingConfiguration) ResponseHandler(org.apache.http.client.ResponseHandler) ShippingQuoteModule(com.salesmanager.core.modules.integration.shipping.model.ShippingQuoteModule) HttpClients(org.apache.http.impl.client.HttpClients) HttpPost(org.apache.http.client.methods.HttpPost) HttpEntity(org.apache.http.HttpEntity) Reader(java.io.Reader) StringReader(java.io.StringReader) BufferedReader(java.io.BufferedReader) ClientProtocolException(org.apache.http.client.ClientProtocolException) StringEntity(org.apache.http.entity.StringEntity) Digester(org.apache.commons.digester.Digester) StringReader(java.io.StringReader) CloseableHttpClient(org.apache.http.impl.client.CloseableHttpClient) IntegrationException(com.salesmanager.core.modules.integration.IntegrationException) ModuleConfig(com.salesmanager.core.model.system.ModuleConfig) BigDecimal(java.math.BigDecimal) ClientProtocolException(org.apache.http.client.ClientProtocolException) IntegrationException(com.salesmanager.core.modules.integration.IntegrationException) ShippingOption(com.salesmanager.core.model.shipping.ShippingOption) BufferedReader(java.io.BufferedReader) Country(com.salesmanager.core.model.reference.country.Country) PackageDetails(com.salesmanager.core.model.shipping.PackageDetails)

Example 9 with PackageDetails

use of com.salesmanager.core.model.shipping.PackageDetails in project shopizer by shopizer-ecommerce.

the class CustomWeightBasedShippingQuote method getShippingQuotes.

@Override
public List<ShippingOption> getShippingQuotes(ShippingQuote shippingQuote, List<PackageDetails> packages, BigDecimal orderTotal, Delivery delivery, ShippingOrigin origin, MerchantStore store, IntegrationConfiguration configuration, IntegrationModule module, ShippingConfiguration shippingConfiguration, Locale locale) throws IntegrationException {
    if (StringUtils.isBlank(delivery.getPostalCode())) {
        return null;
    }
    // get configuration
    CustomShippingQuotesConfiguration customConfiguration = (CustomShippingQuotesConfiguration) this.getCustomModuleConfiguration(store);
    List<CustomShippingQuotesRegion> regions = customConfiguration.getRegions();
    ShippingBasisType shippingType = shippingConfiguration.getShippingBasisType();
    ShippingOption shippingOption = null;
    try {
        for (CustomShippingQuotesRegion region : customConfiguration.getRegions()) {
            for (String countryCode : region.getCountries()) {
                if (countryCode.equals(delivery.getCountry().getIsoCode())) {
                    // determine shipping weight
                    double weight = 0;
                    for (PackageDetails packageDetail : packages) {
                        weight = weight + packageDetail.getShippingWeight();
                    }
                    // see the price associated with the width
                    List<CustomShippingQuoteWeightItem> quoteItems = region.getQuoteItems();
                    for (CustomShippingQuoteWeightItem quoteItem : quoteItems) {
                        if (weight <= quoteItem.getMaximumWeight()) {
                            shippingOption = new ShippingOption();
                            shippingOption.setOptionCode(new StringBuilder().append(CUSTOM_WEIGHT).toString());
                            shippingOption.setOptionId(new StringBuilder().append(CUSTOM_WEIGHT).append("_").append(region.getCustomRegionName()).toString());
                            shippingOption.setOptionPrice(quoteItem.getPrice());
                            shippingOption.setOptionPriceText(productPriceUtils.getStoreFormatedAmountWithCurrency(store, quoteItem.getPrice()));
                            break;
                        }
                    }
                }
            }
        }
        if (shippingOption != null) {
            List<ShippingOption> options = new ArrayList<ShippingOption>();
            options.add(shippingOption);
            return options;
        }
        return null;
    } catch (Exception e) {
        throw new IntegrationException(e);
    }
}
Also used : ShippingBasisType(com.salesmanager.core.model.shipping.ShippingBasisType) IntegrationException(com.salesmanager.core.modules.integration.IntegrationException) CustomShippingQuotesConfiguration(com.salesmanager.core.modules.integration.shipping.model.CustomShippingQuotesConfiguration) CustomShippingQuotesRegion(com.salesmanager.core.modules.integration.shipping.model.CustomShippingQuotesRegion) ArrayList(java.util.ArrayList) ServiceException(com.salesmanager.core.business.exception.ServiceException) IntegrationException(com.salesmanager.core.modules.integration.IntegrationException) ShippingOption(com.salesmanager.core.model.shipping.ShippingOption) CustomShippingQuoteWeightItem(com.salesmanager.core.modules.integration.shipping.model.CustomShippingQuoteWeightItem) PackageDetails(com.salesmanager.core.model.shipping.PackageDetails)

Example 10 with PackageDetails

use of com.salesmanager.core.model.shipping.PackageDetails in project shopizer by shopizer-ecommerce.

the class ShippingFacadeImpl method updatePackage.

@Override
public void updatePackage(String code, PackageDetails packaging, MerchantStore store) {
    Validate.notNull(store, "MerchantStore cannot be null");
    Validate.notNull(packaging, "PackageDetails cannot be null");
    Validate.notEmpty(code, "Packaging unique code cannot be empty");
    ShippingConfiguration config = getDbConfig(store);
    com.salesmanager.core.model.shipping.Package p = this.packageDetails(config, code);
    if (p == null) {
        throw new ResourceNotFoundException("Package with unique code [" + packaging.getCode() + "] not found");
    }
    com.salesmanager.core.model.shipping.Package pack = toPackage(packaging);
    pack.setCode(code);
    // need to check if code exists
    List<com.salesmanager.core.model.shipping.Package> packs = config.getPackages().stream().filter(pa -> !pa.getCode().equals(code)).collect(Collectors.toList());
    packs.add(pack);
    config.setPackages(packs);
    this.saveShippingConfiguration(config, store);
}
Also used : ExpeditionConfiguration(com.salesmanager.shop.model.shipping.ExpeditionConfiguration) ShippingOrigin(com.salesmanager.core.model.shipping.ShippingOrigin) ShippingType(com.salesmanager.core.model.shipping.ShippingType) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) Zone(com.salesmanager.core.model.reference.zone.Zone) CollectionUtils(org.apache.commons.collections4.CollectionUtils) ArrayList(java.util.ArrayList) ServiceException(com.salesmanager.core.business.exception.ServiceException) ZoneService(com.salesmanager.core.business.services.reference.zone.ZoneService) Language(com.salesmanager.core.model.reference.language.Language) MerchantStore(com.salesmanager.core.model.merchant.MerchantStore) ConversionRuntimeException(com.salesmanager.shop.store.api.exception.ConversionRuntimeException) ShippingOriginService(com.salesmanager.core.business.services.shipping.ShippingOriginService) ResourceNotFoundException(com.salesmanager.shop.store.api.exception.ResourceNotFoundException) Service(org.springframework.stereotype.Service) ReadableCountryPopulator(com.salesmanager.shop.populator.references.ReadableCountryPopulator) ShippingService(com.salesmanager.core.business.services.shipping.ShippingService) ReadableCountry(com.salesmanager.shop.model.references.ReadableCountry) OperationNotAllowedException(com.salesmanager.shop.store.api.exception.OperationNotAllowedException) CountryService(com.salesmanager.core.business.services.reference.country.CountryService) Validate(org.jsoup.helper.Validate) Logger(org.slf4j.Logger) Country(com.salesmanager.core.model.reference.country.Country) Collectors(java.util.stream.Collectors) List(java.util.List) ShippingPackageType(com.salesmanager.core.model.shipping.ShippingPackageType) PackageDetails(com.salesmanager.core.model.shipping.PackageDetails) ServiceRuntimeException(com.salesmanager.shop.store.api.exception.ServiceRuntimeException) ConversionException(com.salesmanager.core.business.exception.ConversionException) PersistableAddress(com.salesmanager.shop.model.references.PersistableAddress) ReadableAddress(com.salesmanager.shop.model.references.ReadableAddress) ShippingConfiguration(com.salesmanager.core.model.shipping.ShippingConfiguration) Comparator(java.util.Comparator) ResourceNotFoundException(com.salesmanager.shop.store.api.exception.ResourceNotFoundException) ShippingConfiguration(com.salesmanager.core.model.shipping.ShippingConfiguration)

Aggregations

PackageDetails (com.salesmanager.core.model.shipping.PackageDetails)13 ArrayList (java.util.ArrayList)11 ShippingConfiguration (com.salesmanager.core.model.shipping.ShippingConfiguration)7 Country (com.salesmanager.core.model.reference.country.Country)6 BigDecimal (java.math.BigDecimal)6 ServiceException (com.salesmanager.core.business.exception.ServiceException)5 ShippingOption (com.salesmanager.core.model.shipping.ShippingOption)5 ShippingOrigin (com.salesmanager.core.model.shipping.ShippingOrigin)5 IntegrationModule (com.salesmanager.core.model.system.IntegrationModule)5 List (java.util.List)5 MerchantStore (com.salesmanager.core.model.merchant.MerchantStore)4 IntegrationException (com.salesmanager.core.modules.integration.IntegrationException)4 CountryService (com.salesmanager.core.business.services.reference.country.CountryService)3 Language (com.salesmanager.core.model.reference.language.Language)3 Zone (com.salesmanager.core.model.reference.zone.Zone)3 ShippingPackageType (com.salesmanager.core.model.shipping.ShippingPackageType)3 ShippingQuote (com.salesmanager.core.model.shipping.ShippingQuote)3 ShippingType (com.salesmanager.core.model.shipping.ShippingType)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3