blob: 0ca3e79d8e5135e6b1e8629e0ba7eda9858ecd53 [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.packing;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import org.apache.ofbiz.base.util.GeneralException;
import org.apache.ofbiz.base.util.UtilFormatOut;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.service.LocalDispatcher;
import org.apache.ofbiz.service.ServiceUtil;
@SuppressWarnings("serial")
public class PackingSessionLine implements java.io.Serializable {
public final String module = PackingSessionLine.class.getName();
protected String orderId = null;
protected String orderItemSeqId = null;
protected String shipGroupSeqId = null;
protected String productId = null;
protected String inventoryItemId = null;
protected String shipmentItemSeqId = null;
protected BigDecimal quantity = BigDecimal.ZERO;
protected BigDecimal weight = BigDecimal.ZERO;
protected BigDecimal height = null;
protected BigDecimal width = null;
protected BigDecimal length = null;
protected String shipmentBoxTypeId = null;
protected String weightPackageSeqId = null;
protected int packageSeq = 0;
public PackingSessionLine(String orderId, String orderItemSeqId, String shipGroupSeqId, String productId, String inventoryItemId, BigDecimal quantity, BigDecimal weight, int packageSeq) {
this.orderId = orderId;
this.orderItemSeqId = orderItemSeqId;
this.shipGroupSeqId = shipGroupSeqId;
this.inventoryItemId = inventoryItemId;
this.productId = productId;
this.quantity = quantity;
this.weight = weight;
this.height = null;
this.width = null;
this.length = null;
this.shipmentBoxTypeId = null;
this.weightPackageSeqId = null;
this.packageSeq = packageSeq;
}
public String getOrderId() {
return this.orderId;
}
public String getOrderItemSeqId() {
return this.orderItemSeqId;
}
public String getShipGroupSeqId() {
return this.shipGroupSeqId;
}
public String getInventoryItemId() {
return this.inventoryItemId;
}
public String getProductId() {
return this.productId;
}
public String getShipmentItemSeqId() {
return this.shipmentItemSeqId;
}
public void setShipmentItemSeqId(String shipmentItemSeqId) {
this.shipmentItemSeqId = shipmentItemSeqId;
}
public BigDecimal getQuantity() {
return this.quantity;
}
public void setQuantity(BigDecimal quantity) {
this.quantity = quantity;
}
public void addQuantity(BigDecimal quantity) {
this.quantity = this.quantity.add(quantity);
}
public BigDecimal getWeight() {
return weight;
}
public void setWeight(BigDecimal weight) {
this.weight = weight;
}
public void addWeight(BigDecimal weight) {
this.weight = this.weight.add(weight);
}
public int getPackageSeq() {
return this.packageSeq;
}
public BigDecimal getLength() {
return this.length;
}
public void setLength(BigDecimal length) {
this.length = length;
}
public BigDecimal getWidth() {
return this.width;
}
public void setWidth(BigDecimal width) {
this.width = width;
}
public BigDecimal getHeight() {
return this.height;
}
public void setHeight(BigDecimal height) {
this.height = height;
}
public String getShipmentBoxTypeId() {
return this.shipmentBoxTypeId;
}
public void setShipmentBoxTypeId(String shipmentBoxTypeId) {
this.shipmentBoxTypeId = shipmentBoxTypeId;
}
public String getWeightPackageSeqId() {
return this.weightPackageSeqId;
}
public void setWeightPackageSeqId(String weightPackageSeqId) {
this.weightPackageSeqId = weightPackageSeqId;
}
public boolean isSameItem(PackingSessionLine line) {
if (this.getInventoryItemId().equals(line.getInventoryItemId())) {
if (this.getOrderItemSeqId().equals(line.getOrderItemSeqId())) {
if (this.getOrderId().equals(line.getOrderId())) {
if (this.getShipGroupSeqId().equals(line.getShipGroupSeqId())) {
return true;
}
}
}
}
return false;
}
protected void issueItemToShipment(String shipmentId, String picklistBinId, GenericValue userLogin, BigDecimal quantity, LocalDispatcher dispatcher) throws GeneralException {
if (quantity == null) {
quantity = this.getQuantity();
}
Map<String, Object> issueMap = new HashMap<String, Object>();
issueMap.put("shipmentId", shipmentId);
issueMap.put("orderId", this.getOrderId());
issueMap.put("orderItemSeqId", this.getOrderItemSeqId());
issueMap.put("shipGroupSeqId", this.getShipGroupSeqId());
issueMap.put("inventoryItemId", this.getInventoryItemId());
issueMap.put("quantity", quantity);
issueMap.put("userLogin", userLogin);
Map<String, Object> issueResp = dispatcher.runSync("issueOrderItemShipGrpInvResToShipment", issueMap);
if (ServiceUtil.isError(issueResp)) {
throw new GeneralException(ServiceUtil.getErrorMessage(issueResp));
}
String shipmentItemSeqId = (String) issueResp.get("shipmentItemSeqId");
if (shipmentItemSeqId == null) {
throw new GeneralException("Issue item did not return a valid shipmentItemSeqId!");
} else {
this.setShipmentItemSeqId(shipmentItemSeqId);
}
if (picklistBinId != null) {
// find the pick list item
Debug.logInfo("Looking up picklist item for bin ID #" + picklistBinId, module);
Delegator delegator = dispatcher.getDelegator();
Map<String, Object> itemLookup = new HashMap<String, Object>();
itemLookup.put("picklistBinId", picklistBinId);
itemLookup.put("orderId", this.getOrderId());
itemLookup.put("orderItemSeqId", this.getOrderItemSeqId());
itemLookup.put("shipGroupSeqId", this.getShipGroupSeqId());
itemLookup.put("inventoryItemId", this.getInventoryItemId());
GenericValue plItem = EntityQuery.use(delegator)
.from("PicklistItem")
.where(itemLookup)
.queryOne();
if (plItem != null) {
Debug.logInfo("Found picklist bin: " + plItem, module);
BigDecimal itemQty = plItem.getBigDecimal("quantity");
if (itemQty.compareTo(quantity) == 0) {
// set to complete
itemLookup.put("itemStatusId", "PICKITEM_COMPLETED");
} else {
itemLookup.put("itemStatusId", "PICKITEM_CANCELLED");
}
itemLookup.put("userLogin", userLogin);
Map<String, Object> itemUpdateResp = dispatcher.runSync("updatePicklistItem", itemLookup);
if (ServiceUtil.isError(itemUpdateResp)) {
throw new GeneralException(ServiceUtil.getErrorMessage(issueResp));
}
} else {
Debug.logInfo("No item was found for lookup: " + itemLookup, module);
}
} else {
Debug.logWarning("*** NO Picklist Bin ID set; cannot update picklist status!", module);
}
}
protected void applyLineToPackage(String shipmentId, GenericValue userLogin, LocalDispatcher dispatcher) throws GeneralException {
// assign item to package
String shipmentPackageSeqId = UtilFormatOut.formatPaddedNumber(this.getPackageSeq(), 5);
Map<String, Object> packageMap = new HashMap<String, Object>();
packageMap.put("shipmentId", shipmentId);
packageMap.put("shipmentItemSeqId", this.getShipmentItemSeqId());
packageMap.put("quantity", this.getQuantity());
packageMap.put("shipmentPackageSeqId", shipmentPackageSeqId);
packageMap.put("userLogin", userLogin);
Map<String, Object> packageResp = dispatcher.runSync("addShipmentContentToPackage", packageMap);
if (ServiceUtil.isError(packageResp)) {
throw new GeneralException(ServiceUtil.getErrorMessage(packageResp));
}
}
}