/* * 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.UtilMisc import org.apache.ofbiz.entity.util.EntityTypeUtil import org.apache.ofbiz.entity.util.EntityUtil orderId = parameters.orderId if (!orderId) return shipGroupSeqId = parameters.shipGroupSeqId // if a particular ship group is requested, we will limit ourselves to it findMap = [orderId: orderId] if (shipGroupSeqId) findMap.shipGroupSeqId = shipGroupSeqId shipGroups = from("OrderItemShipGroup").where(findMap).orderBy("shipGroupSeqId").queryList() context.shipGroups = shipGroups // method to expand the marketing packages LinkedList expandProductGroup(product, quantityInGroup, quantityShipped, quantityOpen, assocType) { sublines = [] associations = product.getRelated("MainProductAssoc", [productAssocTypeId : assocType], null, false) associations = EntityUtil.filterByDate(associations) associations.each { association -> line = [:] line.product = association.getRelatedOne("AssocProduct", false) // determine the quantities quantityComposed = association.quantity ?: 0 line.quantityInGroup = quantityInGroup * quantityComposed line.quantityShipped = quantityShipped * quantityComposed line.quantityOpen = quantityOpen * quantityComposed sublines.add(line) } return sublines } groupData = [:] shipGroups.each { shipGroup -> data = [:] address = shipGroup.getRelatedOne("PostalAddress", false) data.address = address phoneNumber = shipGroup.getRelatedOne("TelecomTelecomNumber", false) data.phoneNumber = phoneNumber carrierShipmentMethod = shipGroup.getRelatedOne("CarrierShipmentMethod", false) if (carrierShipmentMethod) { data.carrierShipmentMethod = carrierShipmentMethod data.shipmentMethodType = carrierShipmentMethod.getRelatedOne("ShipmentMethodType", true) } // the lines in a page, each line being a row of data to display lines = [] // process the order item to ship group associations, each being a line item for the group orderItemAssocs = shipGroup.getRelated("OrderItemShipGroupAssoc", null, ["orderItemSeqId"], false) orderItemAssocs.each { orderItemAssoc -> orderItem = orderItemAssoc.getRelatedOne("OrderItem", false) product = orderItem.getRelatedOne("Product", false) line = [:] // the quantity in group quantityInGroup = orderItemAssoc.quantity if (orderItemAssoc.cancelQuantity) { quantityInGroup -= orderItemAssoc.cancelQuantity } // the quantity shipped quantityShipped = 0.0 issuances = from("ItemIssuance").where("orderId", orderItem.orderId, "orderItemSeqId", orderItem.orderItemSeqId, "shipGroupSeqId", orderItemAssoc.shipGroupSeqId).queryList() issuances.each { issuance -> quantityShipped += issuance.quantity } // the quantity open (ordered - shipped) quantityOpen = orderItem.quantity if (orderItem.cancelQuantity) { quantityOpen -= orderItem.cancelQuantity } quantityOpen -= quantityShipped line.orderItem = orderItem line.product = product line.quantityInGroup = quantityInGroup line.quantityShipped = quantityShipped line.quantityOpen = quantityOpen if (EntityTypeUtil.hasParentType(delegator, "ProductType", "productTypeId", product.productTypeId, "parentTypeId", "MARKETING_PKG")) { assocType = EntityTypeUtil.hasParentType(delegator, "ProductType", "productTypeId", product.productTypeId, "parentTypeId", "MARKETING_PKG_AUTO") ? "MANUF_COMPONENT" : "PRODUCT_COMPONENT" sublines = expandProductGroup(product, quantityInGroup, quantityShipped, quantityOpen, assocType) line.expandedList = sublines } lines.add(line) } data.lines = lines groupData[shipGroup.shipGroupSeqId] = data } context.groupData = groupData