| /* |
| * 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. |
| */ |
| |
| import org.apache.ofbiz.base.util.* |
| import org.apache.ofbiz.order.order.* |
| import org.apache.ofbiz.entity.util.EntityUtil |
| import org.apache.ofbiz.entity.util.EntityUtilProperties |
| import org.apache.ofbiz.entity.condition.EntityCondition |
| |
| |
| facilityId = parameters.facilityId |
| if (facilityId) { |
| facility = from("Facility").where("facilityId", facilityId).queryOne() |
| context.facilityId = facilityId |
| context.facility = facility |
| } |
| |
| // order based packing |
| orderId = parameters.orderId |
| shipGroupSeqId = parameters.shipGroupSeqId |
| shipmentId = parameters.shipmentId |
| if (!shipmentId) { |
| shipmentId = request.getAttribute("shipmentId") |
| } |
| context.shipmentId = shipmentId |
| |
| // If a shipment exists, provide the IDs of any related invoices |
| invoiceIds = null |
| if (shipmentId) { |
| // Get the primaryOrderId from the shipment |
| shipment = from("Shipment").where("shipmentId", shipmentId).queryOne() |
| if (shipment && shipment.primaryOrderId) { |
| orderItemBillingList = from("OrderItemBilling").where("orderId", shipment.primaryOrderId).orderBy("invoiceId").queryList() |
| invoiceIds = EntityUtil.getFieldListFromEntityList(orderItemBillingList, "invoiceId", true) |
| if (invoiceIds) { |
| context.invoiceIds = invoiceIds |
| } |
| } |
| } |
| |
| // validate order information |
| if (orderId && !shipGroupSeqId && orderId.indexOf("/") > -1) { |
| // split the orderID/shipGroupSeqID |
| idSplit = orderId.split("\\/") |
| orderId = idSplit[0] |
| shipGroupSeqId = idSplit[1] |
| } else if (orderId && !shipGroupSeqId) { |
| shipGroupSeqId = "00001" |
| } |
| |
| // setup the packing session |
| packSession = session.getAttribute("packingSession") |
| clear = parameters.clear |
| if (!packSession) { |
| packSession = new org.apache.ofbiz.shipment.packing.PackingSession(dispatcher, userLogin) |
| session.setAttribute("packingSession", packSession) |
| Debug.log("Created NEW packing session!!") |
| } else { |
| if (packSession.getStatus() == 0) { |
| OrderReadHelper orh = new OrderReadHelper(delegator, orderId) |
| shipGrp = orh.getOrderItemShipGroup(shipGroupSeqId) |
| context.shippedShipGroupSeqId = shipGroupSeqId |
| context.shippedOrderId = orderId |
| context.shippedCarrier = shipGrp.carrierPartyId |
| |
| packSession.clear() |
| shipGroupSeqId = null |
| orderId = null |
| } else if (clear) { |
| packSession.clear() |
| } |
| } |
| packSession.clearItemInfos() |
| |
| // picklist based packing information |
| picklistBinId = parameters.picklistBinId |
| // see if the bin ID is already set |
| if (!picklistBinId) { |
| picklistBinId = packSession.getPicklistBinId() |
| } |
| if (picklistBinId) { |
| bin = from("PicklistBin").where("picklistBinId", picklistBinId).queryOne() |
| if (bin) { |
| orderId = bin.primaryOrderId |
| shipGroupSeqId = bin.primaryShipGroupSeqId |
| packSession.addItemInfo(bin.getRelated("PicklistItem", [itemStatusId : 'PICKITEM_PENDING'], null, false)) |
| } |
| } else { |
| picklistBinId = null |
| } |
| |
| // make sure we always re-set the infos |
| packSession.setPrimaryShipGroupSeqId(shipGroupSeqId) |
| packSession.setPrimaryOrderId(orderId) |
| packSession.setPicklistBinId(picklistBinId) |
| packSession.setFacilityId(facilityId) |
| |
| if (invoiceIds) { |
| orderId = null |
| } |
| shipment = from("Shipment").where("primaryOrderId", orderId, "statusId", "SHIPMENT_PICKED").queryFirst() |
| context.shipment = shipment |
| |
| context.packingSession = packSession |
| context.orderId = orderId |
| context.shipGroupSeqId = shipGroupSeqId |
| context.picklistBinId = picklistBinId |
| |
| // grab the order information |
| if (orderId) { |
| orderHeader = from("OrderHeader").where("orderId", orderId).queryOne() |
| if (orderHeader) { |
| OrderReadHelper orh = new OrderReadHelper(orderHeader) |
| context.orderId = orderId |
| context.orderHeader = orderHeader |
| context.orderReadHelper = orh |
| orderItemShipGroup = orh.getOrderItemShipGroup(shipGroupSeqId) |
| context.orderItemShipGroup = orderItemShipGroup |
| carrierPartyId = orderItemShipGroup.carrierPartyId |
| carrierShipmentBoxTypes = from("CarrierShipmentBoxType").where("partyId", carrierPartyId).queryList() |
| if (carrierShipmentBoxTypes) { |
| context.carrierShipmentBoxTypes = carrierShipmentBoxTypes |
| } |
| |
| if ("ORDER_APPROVED".equals(orderHeader.statusId)) { |
| if (shipGroupSeqId) { |
| if (!shipment) { |
| |
| // Generate the shipment cost estimate for the ship group |
| productStoreId = orh.getProductStoreId() |
| shippableItemInfo = orh.getOrderItemAndShipGroupAssoc(shipGroupSeqId) |
| shippableItems = from("OrderItemAndShipGrpInvResAndItemSum").where("orderId", orderId, "shipGroupSeqId", shipGroupSeqId).queryList() |
| shippableTotal = new Double(orh.getShippableTotal(shipGroupSeqId).doubleValue()) |
| shippableWeight = new Double(orh.getShippableWeight(shipGroupSeqId).doubleValue()) |
| shippableQuantity = new Double(orh.getShippableQuantity(shipGroupSeqId).doubleValue()) |
| if (orderItemShipGroup.contactMechId && orderItemShipGroup.shipmentMethodTypeId && orderItemShipGroup.carrierPartyId && orderItemShipGroup.carrierRoleTypeId) { |
| shipmentCostEstimate = packSession.getShipmentCostEstimate(orderItemShipGroup, productStoreId, shippableItemInfo, shippableTotal, shippableWeight, shippableQuantity) |
| context.shipmentCostEstimateForShipGroup = shipmentCostEstimate |
| } |
| context.productStoreId = productStoreId |
| |
| if (!picklistBinId) { |
| packSession.addItemInfo(shippableItems) |
| } |
| } else { |
| request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage("OrderErrorUiLabels", "OrderErrorOrderHasBeenAlreadyVerified", [orderId : orderId], locale)) |
| } |
| } else { |
| request.setAttribute("errorMessageList", ['No ship group sequence ID. Cannot process.']) |
| } |
| } else { |
| request.setAttribute("errorMessageList", ["Order #" + orderId + " is not approved for packing."]) |
| } |
| } else { |
| request.setAttribute("errorMessageList", ["Order #" + orderId + " cannot be found."]) |
| } |
| } |
| |
| // Try to get the defaultWeightUomId first from the facility, then from the shipment properties, and finally defaulting to kilos |
| defaultWeightUomId = null |
| if (facility) { |
| defaultWeightUomId = facility.defaultWeightUomId |
| } |
| if (!defaultWeightUomId) { |
| defaultWeightUomId = EntityUtilProperties.getPropertyValue("shipment", "shipment.default.weight.uom", "WT_kg", delegator) |
| } |
| context.defaultWeightUomId = defaultWeightUomId |