blob: 5bbd59e69486d8496da3af79f0118f91bf9f68a8 [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.
*/
import java.math.BigDecimal
import java.util.*
import java.sql.Timestamp
import org.apache.ofbiz.entity.*
import org.apache.ofbiz.entity.condition.*
import org.apache.ofbiz.entity.util.*
import org.apache.ofbiz.base.util.*
import org.apache.ofbiz.base.util.collections.*
import org.apache.ofbiz.order.order.*
import org.apache.ofbiz.party.contact.*
import org.apache.ofbiz.product.inventory.InventoryWorker
import org.apache.ofbiz.product.catalog.CatalogWorker
import org.apache.ofbiz.product.store.ProductStoreWorker
import org.apache.ofbiz.accounting.payment.*
orderId = parameters.orderId
context.orderId = orderId
workEffortId = parameters.workEffortId
assignPartyId = parameters.partyId
assignRoleTypeId = parameters.roleTypeId
fromDate = parameters.fromDate
delegate = parameters.delegate
if (delegate && fromDate) {
fromDate = parameters.toFromDate
}
context.workEffortId = workEffortId
context.assignPartyId = assignPartyId
context.assignRoleTypeId = assignRoleTypeId
context.fromDate = fromDate
context.delegate = delegate
context.todayDate = new java.sql.Date(System.currentTimeMillis()).toString()
def partyId = null
orderHeader = null
orderItems = null
orderAdjustments = null
comments = null
if (orderId) {
orderHeader = from('OrderHeader').where('orderId', orderId).cache(false).queryFirst()
comments = select("orderItemSeqId", "changeComments", "changeDatetime", "changeUserLogin").from("OrderItemChange").where(UtilMisc.toList(EntityCondition.makeCondition("orderId", EntityOperator.EQUALS, orderId))).orderBy("-changeDatetime").queryList()
}
if (orderHeader) {
// note these are overridden in the OrderViewWebSecure.groovy script if run
context.hasPermission = true
context.canViewInternalDetails = true
orderReadHelper = new OrderReadHelper(orderHeader)
orderItems = orderReadHelper.getOrderItems()
orderAdjustments = orderReadHelper.getAdjustments()
orderHeaderAdjustments = orderReadHelper.getOrderHeaderAdjustments()
orderSubTotal = orderReadHelper.getOrderItemsSubTotal()
orderTerms = orderHeader.getRelated("OrderTerm", null, null, false)
context.orderHeader = orderHeader
context.comments = comments
context.orderReadHelper = orderReadHelper
context.orderItems = orderItems
context.orderAdjustments = orderAdjustments
context.orderHeaderAdjustments = orderHeaderAdjustments
context.orderSubTotal = orderSubTotal
context.currencyUomId = orderReadHelper.getCurrency()
context.orderTerms = orderTerms
// get sales reps
context.salesReps = orderHeader.getRelated("OrderRole", [orderId : orderHeader.orderId, roleTypeId : "SALES_REP"], null, false)
// get the order type
orderType = orderHeader.orderTypeId
context.orderType = orderType
// get the display party
displayParty = null
if ("PURCHASE_ORDER".equals(orderType)) {
displayParty = orderReadHelper.getSupplierAgent()
} else {
displayParty = orderReadHelper.getPlacingParty()
}
if (displayParty) {
partyId = displayParty.partyId
context.displayParty = displayParty
context.partyId = partyId
paymentMethodValueMaps = PaymentWorker.getPartyPaymentMethodValueMaps(delegator, displayParty.partyId, false)
context.paymentMethodValueMaps = paymentMethodValueMaps
}
otherAdjAmount = OrderReadHelper.calcOrderAdjustments(orderHeaderAdjustments, orderSubTotal, true, false, false)
context.otherAdjAmount = otherAdjAmount
shippingAmount = OrderReadHelper.getAllOrderItemsAdjustmentsTotal(orderItems, orderAdjustments, false, false, true)
shippingAmount = shippingAmount.add(OrderReadHelper.calcOrderAdjustments(orderHeaderAdjustments, orderSubTotal, false, false, true))
context.shippingAmount = shippingAmount
taxAmount = OrderReadHelper.getOrderTaxByTaxAuthGeoAndParty(orderAdjustments).taxGrandTotal
context.taxAmount = taxAmount
grandTotal = orderReadHelper.getOrderGrandTotal()
context.grandTotal = grandTotal
orderItemList = orderReadHelper.getOrderItems()
// Retrieve all non-promo items that aren't cancelled
context.orderItemList = orderReadHelper.getOrderItems().findAll { item ->
(item.isPromo == null || item.isPromo == 'N') || !item.statusId.equals('ITEM_CANCELLED')
}
shippingAddress = orderReadHelper.getShippingAddress()
context.shippingAddress = shippingAddress
billingAddress = orderReadHelper.getBillingAddress()
context.billingAddress = billingAddress
distributorId = orderReadHelper.getDistributorId()
context.distributorId = distributorId
affiliateId = orderReadHelper.getAffiliateId()
context.affiliateId = affiliateId
billingAccount = orderHeader.getRelatedOne("BillingAccount", false)
context.billingAccount = billingAccount
context.billingAccountMaxAmount = orderReadHelper.getBillingAccountMaxAmount()
// get a list of all shipments, and a list of ItemIssuances per order item
allShipmentsMap = [:]
primaryShipments = orderHeader.getRelated("PrimaryShipment", null, null, false)
primaryShipments.each { primaryShipment ->
allShipmentsMap[primaryShipment.shipmentId] = primaryShipment
}
itemIssuancesPerItem = [:]
itemIssuances = orderHeader.getRelated("ItemIssuance", null, ["shipmentId", "shipmentItemSeqId"], false)
itemIssuances.each { itemIssuance ->
if (!allShipmentsMap.containsKey(itemIssuance.shipmentId)) {
iiShipment = itemIssuance.getRelatedOne("Shipment", false)
if (iiShipment) {
allShipmentsMap[iiShipment.shipmentId] = iiShipment
}
}
perItemList = itemIssuancesPerItem[itemIssuance.orderItemSeqId]
if (!perItemList) {
perItemList = []
itemIssuancesPerItem[itemIssuance.orderItemSeqId] = perItemList
}
perItemList.add(itemIssuance)
}
context.allShipments = allShipmentsMap.values()
context.itemIssuancesPerItem = itemIssuancesPerItem
// get a list of all invoices
orderBilling = from("OrderItemBilling").where("orderId", orderId).orderBy("invoiceId").queryList()
context.invoices = orderBilling*.invoiceId.unique()
ecl = EntityCondition.makeCondition([
EntityCondition.makeCondition("orderId", EntityOperator.EQUALS, orderId),
EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "PAYMENT_CANCELLED")],
EntityOperator.AND)
orderPaymentPreferences = from("OrderPaymentPreference").where(ecl).queryList()
context.orderPaymentPreferences = orderPaymentPreferences
// ship groups
shipGroups = from("OrderItemShipGroup").where("orderId", orderId).orderBy("shipGroupSeqId").queryList()
context.shipGroups = shipGroups
orderItemDatas = []
orderItemList.each { orderItem ->
BigDecimal cancelQuantity = orderItem.get("cancelQuantity")
BigDecimal quantity = orderItem.get("quantity")
if ( cancelQuantity != null ) {
quantityOrdered = quantity.subtract(cancelQuantity)
} else {
quantityOrdered = quantity
}
OISGAssContents = []
shipGroups.each { shipGroup ->
OISGAssContents.addAll(EntityUtil.filterByAnd(shipGroup.getRelated("OrderItemShipGroupAssoc", null, null, false), UtilMisc.toMap("orderItemSeqId", orderItem.getString("orderItemSeqId"))))
}
BigDecimal totalQuantityPlanned = 0
OISGAssContents.each { OISGAssContent ->
BigDecimal cancelQty = OISGAssContent.get("cancelQuantity")
BigDecimal qty = OISGAssContent.get("quantity")
if (qty != null) {
totalQuantityPlanned = totalQuantityPlanned.add(qty)
}
if (cancelQty != null){
OISGAssContent.set("quantity", qty.subtract(cancelQty))
} else {
OISGAssContent.set("quantity", qty)
}
}
totalQuantityToPlan = totalQuantityPlanned - quantityOrdered
BigDecimal quantityNotAvailable = 0
List<GenericValue> oisgirs = orderItem.getRelated("OrderItemShipGrpInvRes", null, null, false)
for (GenericValue oisgir : oisgirs) {
if (UtilValidate.isNotEmpty(oisgir.get("quantityNotAvailable"))) {
quantityNotAvailable = quantityNotAvailable.add(oisgir.getBigDecimal("quantityNotAvailable"))
}
}
orderItemData = [:]
orderItemData.put("orderItem", orderItem)
orderItemData.put("OISGAssContents", OISGAssContents)
orderItemData.put("product", orderItem.getRelatedOne("Product", false))
orderItemData.put("quantityOrdered", quantityOrdered)
orderItemData.put("totalQuantityPlanned", totalQuantityPlanned)
orderItemData.put("totalQuantityToPlan", totalQuantityToPlan)
orderItemData.put("quantityNotAvailable", quantityNotAvailable)
orderItemDatas.add(orderItemData)
}
context.put("orderItemDatas", orderItemDatas)
// create the actualDate for calendar
actualDateCal = Calendar.getInstance()
actualDateCal.setTime(new java.util.Date())
actualDateCal.set(Calendar.HOUR_OF_DAY, actualDateCal.getActualMinimum(Calendar.HOUR_OF_DAY))
actualDateCal.set(Calendar.MINUTE, actualDateCal.getActualMinimum(Calendar.MINUTE))
actualDateCal.set(Calendar.SECOND, actualDateCal.getActualMinimum(Calendar.SECOND))
actualDateCal.set(Calendar.MILLISECOND, actualDateCal.getActualMinimum(Calendar.MILLISECOND))
actualDateTs = new Timestamp(actualDateCal.getTimeInMillis())
actualDateStr = actualDateTs.toString()
actualDateStr = actualDateStr.substring(0, actualDateStr.indexOf('.'))
context.put("actualDateStr", actualDateStr)
// get Shipment tracking info
orderShipmentInfoSummaryList = select("shipGroupSeqId", "shipmentId", "shipmentRouteSegmentId", "carrierPartyId", "shipmentMethodTypeId", "shipmentPackageSeqId", "trackingCode", "boxNumber")
.from("OrderShipmentInfoSummary")
.where("orderId", orderId)
.orderBy("shipmentId", "shipmentRouteSegmentId", "shipmentPackageSeqId")
.distinct()
.queryList()
context.orderShipmentInfoSummaryList = orderShipmentInfoSummaryList
customerPoNumber = null
orderItemList.each { orderItem ->
customerPoNumber = orderItem.correspondingPoId
}
context.customerPoNumber = customerPoNumber
statusChange = from("StatusValidChange").where("statusId", orderHeader.statusId).queryList()
context.statusChange = statusChange
currentStatus = orderHeader.getRelatedOne("StatusItem", false)
context.currentStatus = currentStatus
orderHeaderStatuses = orderReadHelper.getOrderHeaderStatuses()
context.orderHeaderStatuses = orderHeaderStatuses
adjustmentTypes = from("OrderAdjustmentType").orderBy("description").queryList()
context.orderAdjustmentTypes = adjustmentTypes
notes = from("OrderHeaderNoteView").where("orderId", orderId).orderBy("-noteDateTime").queryList()
context.orderNotes = notes
showNoteHeadingOnPDF = false
if (notes && EntityUtil.filterByCondition(notes, EntityCondition.makeCondition("internalNote", EntityOperator.EQUALS, "N")).size() > 0) {
showNoteHeadingOnPDF = true
}
context.showNoteHeadingOnPDF = showNoteHeadingOnPDF
cmvm = ContactMechWorker.getOrderContactMechValueMaps(delegator, orderId)
context.orderContactMechValueMaps = cmvm
orderItemChangeReasons = from("Enumeration").where("enumTypeId", "ODR_ITM_CH_REASON").orderBy("sequenceId").queryList()
context.orderItemChangeReasons = orderItemChangeReasons
if ("PURCHASE_ORDER".equals(orderType)) {
// for purchase orders, we need also the supplier's postal address
supplier = orderReadHelper.getBillFromParty()
if (supplier) {
supplierContactMechValueMaps = ContactMechWorker.getPartyContactMechValueMaps(delegator, supplier.partyId, false, "POSTAL_ADDRESS")
context.supplierContactMechValueMaps = supplierContactMechValueMaps
supplierContactMechValueMaps.each { supplierContactMechValueMap ->
contactMechPurposes = supplierContactMechValueMap.partyContactMechPurposes
contactMechPurposes.each { contactMechPurpose ->
if (contactMechPurpose.contactMechPurposeTypeId.equals("GENERAL_LOCATION")) {
context.supplierGeneralContactMechValueMap = supplierContactMechValueMap
} else if (contactMechPurpose.contactMechPurposeTypeId.equals("SHIPPING_LOCATION")) {
context.supplierShippingContactMechValueMap = supplierContactMechValueMap
} else if (contactMechPurpose.contactMechPurposeTypeId.equals("BILLING_LOCATION")) {
context.supplierBillingContactMechValueMap = supplierContactMechValueMap
} else if (contactMechPurpose.contactMechPurposeTypeId.equals("PAYMENT_LOCATION")) {
context.supplierPaymentContactMechValueMap = supplierContactMechValueMap
}
}
}
}
// get purchase order item types
purchaseOrderItemTypeList = from("OrderItemType").where("parentTypeId", "PURCHASE_SPECIFIC").cache(true).queryList()
context.purchaseOrderItemTypeList = purchaseOrderItemTypeList
}
// see if an approved order with all items completed exists
context.setOrderCompleteOption = false
if ("ORDER_APPROVED".equals(orderHeader.statusId)) {
expr = EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ITEM_COMPLETED")
notCreatedItems = orderReadHelper.getOrderItemsByCondition(expr)
if (!notCreatedItems) {
context.setOrderCompleteOption = true
}
}
// get inventory summary for each shopping cart product item
inventorySummary = runService('getProductInventorySummaryForItems', [orderItems : orderItems])
context.availableToPromiseMap = inventorySummary.availableToPromiseMap
context.quantityOnHandMap = inventorySummary.quantityOnHandMap
context.mktgPkgATPMap = inventorySummary.mktgPkgATPMap
context.mktgPkgQOHMap = inventorySummary.mktgPkgQOHMap
// get inventory summary with respect to facility
productStore = orderReadHelper.getProductStore()
context.productStore = productStore
if (productStore) {
facility = productStore.getRelatedOne("Facility", false)
if (facility) {
inventorySummaryByFacility = runService("getProductInventorySummaryForItems", [orderItems : orderItems, facilityId : facility.facilityId])
context.availableToPromiseByFacilityMap = inventorySummaryByFacility.availableToPromiseMap
context.quantityOnHandByFacilityMap = inventorySummaryByFacility.quantityOnHandMap
context.facility = facility
}
}
// Get a list of facilities for purchase orders to receive against.
// These facilities must be owned by the bill-to party of the purchase order.
// For a given ship group, the allowed facilities are the ones associated
// to the same contact mech of the ship group.
if ("PURCHASE_ORDER".equals(orderType)) {
facilitiesForShipGroup = [:]
if (orderReadHelper.getBillToParty()) {
ownerPartyId = orderReadHelper.getBillToParty().partyId
Map ownedFacilities = [:]
shipGroups.each { shipGroup ->
lookupMap = [ownerPartyId : ownerPartyId]
if (shipGroup.contactMechId) {
lookupMap.contactMechId = shipGroup.contactMechId
}
facilities = from("FacilityAndContactMech").where(lookupMap).cache(true).queryList()
facilitiesForShipGroup[shipGroup.shipGroupSeqId] = facilities
facilities.each { facility ->
ownedFacilities[facility.facilityId] = facility
}
}
context.facilitiesForShipGroup = facilitiesForShipGroup
// Now get the list of all the facilities owned by the bill-to-party
context.ownedFacilities = ownedFacilities.values()
}
}
// set the type of return based on type of order
if ("SALES_ORDER".equals(orderType)) {
context.returnHeaderTypeId = "CUSTOMER_RETURN"
// also set the product store facility Id for sales orders
if (productStore) {
context.storeFacilityId = productStore.inventoryFacilityId
if (productStore.reqReturnInventoryReceive) {
context.needsInventoryReceive = productStore.reqReturnInventoryReceive
} else {
context.needsInventoryReceive = "Y"
}
}
} else {
context.returnHeaderTypeId = "VENDOR_RETURN"
}
// QUANTITY: get the returned quantity by order item map
context.returnQuantityMap = orderReadHelper.getOrderItemReturnedQuantities()
// INVENTORY: construct a Set of productIds in the order for use in querying for inventory, otherwise these queries can get expensive
productIds = orderReadHelper.getOrderProductIds()
// INVENTORY: get the production quantity for each product and store the results in a map of productId -> quantity
productionMap = [:]
productIds.each { productId ->
if (productId) { // avoid order items without productIds, such as bulk order items
resultOutput = runService("getProductManufacturingSummaryByFacility", [productId : productId])
manufacturingInQuantitySummaryByFacility = resultOutput.summaryInByFacility
Double productionQuantity = 0
manufacturingInQuantitySummaryByFacility.values().each { manQuantity ->
productionQuantity += manQuantity.estimatedQuantityTotal
}
productionMap[productId] = productionQuantity
}
}
context.productionProductQuantityMap = productionMap
if (productIds.size() > 0) {
// INVENTORY: find the number of products in outstanding sales orders for the same product store
requiredMap = InventoryWorker.getOutstandingProductQuantitiesForSalesOrders(productIds, delegator)
context.requiredProductQuantityMap = requiredMap
// INVENTORY: find the quantity of each product in outstanding purchase orders
onOrderMap = InventoryWorker.getOutstandingProductQuantitiesForPurchaseOrders(productIds, delegator)
context.onOrderProductQuantityMap = onOrderMap
} else {
context.requiredProductQuantityMap = [:]
context.onOrderProductQuantityMap = [:]
}
// list to find all the POSTAL_ADDRESS for the shipment party.
orderParty = from("Party").where("partyId", partyId).queryOne()
shippingContactMechList = ContactHelper.getContactMech(orderParty, "SHIPPING_LOCATION", "POSTAL_ADDRESS", false)
context.shippingContactMechList = shippingContactMechList
// list to find all the shipmentMethods from the view named "ProductStoreShipmentMethView".
shipGroupShippingMethods = [:]
shipGroups.each { shipGroup ->
shipGroupSeqId = shipGroup.shipGroupSeqId
shippableItemFeatures = orderReadHelper.getFeatureIdQtyMap(shipGroupSeqId)
shippableTotal = orderReadHelper.getShippableTotal(shipGroupSeqId)
shippableWeight = orderReadHelper.getShippableWeight(shipGroupSeqId)
shippableItemSizes = orderReadHelper.getShippableSizes(shipGroupSeqId)
shippingAddress = orderReadHelper.getShippingAddress(shipGroupSeqId)
List<GenericValue> productStoreShipmentMethList = ProductStoreWorker.getAvailableStoreShippingMethods(delegator, orderReadHelper.getProductStoreId(),
shippingAddress, shippableItemSizes, shippableItemFeatures, shippableWeight, shippableTotal)
shipGroupShippingMethods.put(shipGroupSeqId, productStoreShipmentMethList)
context.shipGroupShippingMethods = shipGroupShippingMethods
}
// Get a map of returnable items
returnableItems = [:]
returnableItemServiceMap = run service: 'getReturnableItems', with: [orderId : orderId]
if (returnableItemServiceMap.returnableItems) {
returnableItems = returnableItemServiceMap.returnableItems
}
context.returnableItems = returnableItems
// get the catalogIds for appending items
if (context.request != null) {
if ("SALES_ORDER".equals(orderType) && productStore) {
catalogCol = CatalogWorker.getCatalogIdsAvailable(delegator, productStore.productStoreId, partyId)
} else {
catalogCol = CatalogWorker.getAllCatalogIds(request)
}
if (catalogCol) {
currentCatalogId = catalogCol[0]
currentCatalogName = CatalogWorker.getCatalogName(request, currentCatalogId)
context.catalogCol = catalogCol
context.currentCatalogId = currentCatalogId
context.currentCatalogName = currentCatalogName
}
}
// list to find all the POSTAL_ADDRESS for the party.
orderParty = from("Party").where("partyId", partyId).queryOne()
postalContactMechList = ContactHelper.getContactMechByType(orderParty,"POSTAL_ADDRESS", false)
context.postalContactMechList = postalContactMechList
// list to find all the TELECOM_NUMBER for the party.
telecomContactMechList = ContactHelper.getContactMechByType(orderParty,"TELECOM_NUMBER", false)
context.telecomContactMechList = telecomContactMechList
// list to find all the EMAIL_ADDRESS for the party.
emailContactMechList = ContactHelper.getContactMechByType(orderParty,"EMAIL_ADDRESS", false)
context.emailContactMechList = emailContactMechList
}
paramString = ""
if (orderId) paramString += "orderId=" + orderId
if (workEffortId) paramString += "&workEffortId=" + workEffortId
if (assignPartyId) paramString += "&partyId=" + assignPartyId
if (assignRoleTypeId) paramString += "&roleTypeId=" + assignRoleTypeId
if (fromDate) paramString += "&fromDate=" + fromDate
context.paramString = paramString
workEffortStatus = null
if (workEffortId && assignPartyId && assignRoleTypeId && fromDate) {
wepa = from("WorkEffortPartyAssignment").where("workEffortId", workEffortId, "partyId", assignPartyId, "roleTypeId", assignRoleTypeId, "fromDate", fromDate).queryOne()
if ("CAL_ACCEPTED".equals(wepa?.statusId)) {
workEffort = from("WorkEffort").where("workEffortId", workEffortId).queryOne()
workEffortStatus = workEffort.currentStatusId
if (workEffortStatus) {
context.workEffortStatus = workEffortStatus
if (workEffortStatus.equals("WF_RUNNING") || workEffortStatus.equals("WF_SUSPENDED"))
context.inProcess = true
}
if (workEffort) {
if ("true".equals(delegate) || "WF_RUNNING".equals(workEffortStatus)) {
activity = from("WorkflowActivity").where("packageId", workEffort.workflowPackageId, "packageVersion", workEffort.workflowPackageVersion, "processId", workEffort.workflowProcessId, "processVersion", workEffort.workflowProcessVersion, "activityId", workEffort.workflowActivityId).queryOne()
if (activity) {
transitions = activity.getRelated("FromWorkflowTransition", null, ["-transitionId"], false)
context.wfTransitions = transitions
}
}
}
}
}
if (orderItems) {
orderItem = EntityUtil.getFirst(orderItems)
context.orderItem = orderItem
}
// getting online ship estimates corresponding to this Order from UPS when "Hold" button will be clicked, when user packs from weight package screen.
// This case comes when order's shipping amount is more then or less than default percentage (defined in shipment.properties) of online UPS shipping amount.
shipments = from("Shipment").where("primaryOrderId", orderId, "statusId", "SHIPMENT_PICKED").queryList()
if (shipments) {
pickedShipmentId = EntityUtil.getFirst(shipments).shipmentId
shipmentRouteSegment = from("ShipmentRouteSegment").where("shipmentId", pickedShipmentId).queryFirst()
context.shipmentRouteSegmentId = shipmentRouteSegment.shipmentRouteSegmentId
context.pickedShipmentId = pickedShipmentId
if (pickedShipmentId && shipmentRouteSegment.trackingIdNumber) {
if ("UPS" == shipmentRouteSegment.carrierPartyId && productStore) {
resultMap = runService('upsShipmentAlternateRatesEstimate', [productStoreId: productStore.productStoreId, shipmentId: pickedShipmentId])
shippingRates = resultMap.shippingRates
shippingRateList = []
shippingRates.each { shippingRate ->
shippingMethodAndRate = [:]
serviceCodes = shippingRate.keySet()
serviceCodes.each { serviceCode ->
carrierShipmentMethod = from("CarrierShipmentMethod").where("partyId", "UPS", "carrierServiceCode", serviceCode).queryFirst()
shipmentMethodTypeId = carrierShipmentMethod.shipmentMethodTypeId
rate = shippingRate.get(serviceCode)
shipmentMethodDescription = EntityUtil.getFirst(carrierShipmentMethod.getRelated("ShipmentMethodType", null, null, false)).description
shippingMethodAndRate.shipmentMethodTypeId = carrierShipmentMethod.shipmentMethodTypeId
shippingMethodAndRate.rate = rate
shippingMethodAndRate.shipmentMethodDescription = shipmentMethodDescription
shippingRateList.add(shippingMethodAndRate)
}
}
context.shippingRateList = shippingRateList
}
}
}
// get orderAdjustmentId for SHIPPING_CHARGES
orderAdjustmentId = null
orderAdjustments.each { orderAdjustment ->
if(orderAdjustment.orderAdjustmentTypeId.equals("SHIPPING_CHARGES")) {
orderAdjustmentId = orderAdjustment.orderAdjustmentId
}
}
context.orderAdjustmentId = orderAdjustmentId