blob: 47a889d5c3b5e9d8b1d30ef1e8bfce7483f147f6 [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*******************************************************************************/
package org.apache.ofbiz.shipment.weightPackage;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.ofbiz.base.util.GeneralException;
import org.apache.ofbiz.base.util.UtilProperties;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.entity.util.EntityUtilProperties;
import org.apache.ofbiz.service.DispatchContext;
import org.apache.ofbiz.service.ServiceUtil;
public class WeightPackageServices {
private static BigDecimal ZERO = BigDecimal.ZERO;
public static Map<String, Object> setPackageInfo(DispatchContext dctx, Map<String, ? extends Object> context) {
Delegator delegator = dctx.getDelegator();
WeightPackageSession weightPackageSession = (WeightPackageSession) context.get("weightPackageSession");
Locale locale = (Locale) context.get("locale");
String orderId = (String) context.get("orderId");
BigDecimal packageWeight = (BigDecimal) context.get("packageWeight");
BigDecimal packageLength = (BigDecimal) context.get("packageLength");
BigDecimal packageWidth = (BigDecimal) context.get("packageWidth");
BigDecimal packageHeight = (BigDecimal) context.get("packageHeight");
String shipmentBoxTypeId = (String) context.get("shipmentBoxTypeId");
// User can either enter all the dimensions or shipment box type, but not both
if (UtilValidate.isNotEmpty(packageLength) || UtilValidate.isNotEmpty(packageWidth) || UtilValidate.isNotEmpty(packageHeight)) { // Check if user entered any dimensions
if (UtilValidate.isNotEmpty(shipmentBoxTypeId)) { // check also if user entered shipment box type
return ServiceUtil.returnError(UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorEnteredBothDimensionAndPackageInputBoxField", locale));
} else if (!(UtilValidate.isNotEmpty(packageLength) && UtilValidate.isNotEmpty(packageWidth) && UtilValidate.isNotEmpty(packageHeight))) { // check if user does not enter all the dimensions
return ServiceUtil.returnError(UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorNotEnteredAllFieldsInDimension", locale));
}
}
// Check package weight, it must be greater than ZERO
if (UtilValidate.isEmpty(packageWeight) || packageWeight.compareTo(ZERO) <= 0) {
return ServiceUtil.returnError(UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorPackageWeightCannotBeNullOrZero", locale));
}
try {
// Checked no of packages, it should not be greater than ordered quantity
List<GenericValue> orderItems = EntityQuery.use(delegator).from("OrderItem").where("orderId", orderId, "statusId", "ITEM_APPROVED").queryList();
BigDecimal orderedItemQty = ZERO;
for (GenericValue orderItem : orderItems) {
orderedItemQty = orderedItemQty.add(orderItem.getBigDecimal("quantity"));
}
int packageQuantity = weightPackageSession.getPackedLines(orderId).size();
if ((orderedItemQty.intValue() - packageQuantity) > 0) {
weightPackageSession.createWeightPackageLine(orderId, packageWeight, packageLength, packageWidth, packageHeight, shipmentBoxTypeId);
} else {
return ServiceUtil.returnError(UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorNumberOfPackageCannotBeGreaterThanTheNumberOfOrderedQuantity", locale));
}
} catch (GeneralException e) {
return ServiceUtil.returnError(e.getMessage());
}
return ServiceUtil.returnSuccess();
}
public static Map<String, Object> updatePackedLine(DispatchContext dctx, Map<String, ? extends Object> context) {
WeightPackageSession weightPackageSession = (WeightPackageSession) context.get("weightPackageSession");
Locale locale = (Locale) context.get("locale");
BigDecimal packageWeight = (BigDecimal) context.get("packageWeight");
BigDecimal packageLength = (BigDecimal) context.get("packageLength");
BigDecimal packageWidth = (BigDecimal) context.get("packageWidth");
BigDecimal packageHeight = (BigDecimal) context.get("packageHeight");
String shipmentBoxTypeId = (String) context.get("shipmentBoxTypeId");
Integer weightPackageSeqId = (Integer) context.get("weightPackageSeqId");
// User can either enter all the dimensions or shipment box type, but not both
if (UtilValidate.isNotEmpty(packageLength) || UtilValidate.isNotEmpty(packageWidth) || UtilValidate.isNotEmpty(packageHeight)) { // Check if user entered any dimensions
if (UtilValidate.isNotEmpty(shipmentBoxTypeId)) { // check also if user entered shipment box type
weightPackageSession.setDimensionAndShipmentBoxType(weightPackageSeqId);
return ServiceUtil.returnError(UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorEnteredBothDimensionAndPackageInputBoxField", locale));
} else if (!(UtilValidate.isNotEmpty(packageLength) && UtilValidate.isNotEmpty(packageWidth) && UtilValidate.isNotEmpty(packageHeight))) { // check if user does not enter all the dimensions
weightPackageSession.setDimensionAndShipmentBoxType(weightPackageSeqId);
return ServiceUtil.returnError(UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorNotEnteredAllFieldsInDimension", locale));
}
}
// Check package weight, it must be greater than ZERO
if (UtilValidate.isEmpty(packageWeight) || packageWeight.compareTo(ZERO) <= 0) {
return ServiceUtil.returnError(UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorPackageWeightCannotBeNullOrZero", locale));
}
weightPackageSession.setPackageWeight(packageWeight, weightPackageSeqId);
weightPackageSession.setPackageLength(packageLength, weightPackageSeqId);
weightPackageSession.setPackageWidth(packageWidth, weightPackageSeqId);
weightPackageSession.setPackageHeight(packageHeight, weightPackageSeqId);
weightPackageSession.setShipmentBoxTypeId(shipmentBoxTypeId, weightPackageSeqId);
return ServiceUtil.returnSuccess();
}
public static Map<String, Object> deletePackedLine(DispatchContext dctx, Map<String, ? extends Object> context) {
WeightPackageSession weightPackageSession = (WeightPackageSession) context.get("weightPackageSession");
Integer weightPackageSeqId = (Integer) context.get("weightPackageSeqId");
weightPackageSession.deletePackedLine(weightPackageSeqId);
return ServiceUtil.returnSuccess();
}
public static Map<String, Object> completePackage(DispatchContext dctx, Map<String, ? extends Object> context) {
WeightPackageSession weightPackageSession = (WeightPackageSession) context.get("weightPackageSession");
Locale locale = (Locale) context.get("locale");
Delegator delegator = dctx.getDelegator();
String orderId = (String) context.get("orderId");
String shipmentId = (String) context.get("shipmentId");
String invoiceId = (String) context.get("invoiceId");
String dimensionUomId = (String) context.get("dimensionUomId");
String weightUomId = (String) context.get("weightUomId");
BigDecimal estimatedShippingCost = (BigDecimal) context.get("estimatedShippingCost");
BigDecimal newEstimatedShippingCost = (BigDecimal) context.get("newEstimatedShippingCost");
if (UtilValidate.isEmpty(newEstimatedShippingCost)) {
newEstimatedShippingCost = ZERO;
}
weightPackageSession.setDimensionUomId(dimensionUomId);
weightPackageSession.setWeightUomId(weightUomId);
weightPackageSession.setShipmentId(shipmentId);
weightPackageSession.setInvoiceId(invoiceId);
weightPackageSession.setEstimatedShipCost(estimatedShippingCost);
weightPackageSession.setActualShipCost(newEstimatedShippingCost);
Map<String, Object> response = new HashMap<String, Object>();
try {
String getActualShippingQuoteFromUps = EntityUtilProperties.getPropertyValue("shipment", "shipment.ups.shipping", "N", delegator);
String result = weightPackageSession.complete(orderId, locale, getActualShippingQuoteFromUps);
if ("showWarningForm".equals(result)) {
response.put("showWarningForm", true);
} else if ("success".equals(result)) {
response.put("shipmentId", shipmentId);
} else {
response = ServiceUtil.returnError(UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorNoItemsCurrentlySetToBeShippedCannotComplete", locale));
}
} catch (GeneralException e) {
return ServiceUtil.returnError(e.getMessage(), e.getMessageList());
}
return response;
}
public static Map<String, Object> completeShipment(DispatchContext dctx, Map<String, ? extends Object> context) {
Locale locale = (Locale) context.get("locale");
Delegator delegator = dctx.getDelegator();
WeightPackageSession weightPackageSession = (WeightPackageSession) context.get("weightPackageSession");
String shipmentId = (String) context.get("shipmentId");
String orderId = (String) context.get("orderId");
Map<String, Object> response = new HashMap<String, Object>();
try {
String getActualShippingQuoteFromUps = EntityUtilProperties.getPropertyValue("shipment", "shipment.ups.shipping", "N", delegator);
if (weightPackageSession.completeShipment(orderId, getActualShippingQuoteFromUps)) {
response.put("shipmentId", shipmentId);
} else {
response = ServiceUtil.returnError(UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorNoItemsCurrentlySetToBeShippedCannotComplete", locale));
}
} catch (GeneralException e) {
return ServiceUtil.returnError(e.getMessage(), e.getMessageList());
}
return response;
}
public static Map<String, Object> savePackagesInfo(DispatchContext dctx, Map<String, ? extends Object> context) {
Locale locale = (Locale) context.get("locale");
Delegator delegator = dctx.getDelegator();
WeightPackageSession weightPackageSession = (WeightPackageSession) context.get("weightPackageSession");
String orderId = (String) context.get("orderId");
String getActualShippingQuoteFromUps = EntityUtilProperties.getPropertyValue("shipment", "shipment.ups.shipping", "N", delegator);
try {
weightPackageSession.savePackagesInfo(orderId, getActualShippingQuoteFromUps);
} catch (GeneralException e) {
return ServiceUtil.returnError(e.getMessage());
}
return ServiceUtil.returnSuccess(UtilProperties.getMessage("ProductUiLabels", "FacilityThereIsProblemOccurredInPaymentCapture", locale));
}
}