/* * 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