/* * 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. */ /* * Script to build the open order item report using * the OrderItemQuantityReportGroupByItem view. */ import org.apache.ofbiz.base.util.UtilMisc import org.apache.ofbiz.entity.condition.* import org.apache.ofbiz.entity.util.* import org.apache.ofbiz.entity.* import org.apache.ofbiz.base.util.* productStoreId = ObjectType.simpleTypeConvert(parameters.productStoreId, "List", null, null) orderTypeId = ObjectType.simpleTypeConvert(parameters.orderTypeId, "List", null, null) orderStatusId = ObjectType.simpleTypeConvert(parameters.orderStatusId, "List", null, null) // search by orderTypeId is mandatory conditions = [EntityCondition.makeCondition("orderTypeId", EntityOperator.IN, orderTypeId)] if (fromOrderDate) { conditions.add(EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, fromOrderDate)) } if (thruOrderDate) { conditions.add(EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, thruOrderDate)) } if (productStoreId) { conditions.add(EntityCondition.makeCondition("productStoreId", EntityOperator.IN, productStoreId)) // for generating a title (given product store) context.productStore = from("ProductStore").where("productStoreId", productStoreId).cache(true).queryOne() } else { // for generating a title (all stores) TODO: use UtilProperties to internationalize context.productStore = [storeName : "All Stores"] } if (orderStatusId) { conditions.add(EntityCondition.makeCondition("orderStatusId", EntityOperator.IN, orderStatusId)) } else { // search all orders that are not completed, cancelled or rejected conditions.add( EntityCondition.makeCondition([ EntityCondition.makeCondition("orderStatusId", EntityOperator.NOT_EQUAL, "ORDER_COMPLETED"), EntityCondition.makeCondition("orderStatusId", EntityOperator.NOT_EQUAL, "ORDER_CANCELLED"), EntityCondition.makeCondition("orderStatusId", EntityOperator.NOT_EQUAL, "ORDER_REJECTED") ], EntityOperator.AND) ) } // item conditions conditions.add(EntityCondition.makeCondition("orderItemStatusId", EntityOperator.NOT_EQUAL, "ITEM_COMPLETED")) conditions.add(EntityCondition.makeCondition("orderItemStatusId", EntityOperator.NOT_EQUAL, "ITEM_CANCELLED")) conditions.add(EntityCondition.makeCondition("orderItemStatusId", EntityOperator.NOT_EQUAL, "ITEM_REJECTED")) // get the results as an entity list iterator listIt = select("orderId", "orderDate", "productId", "quantityOrdered", "quantityIssued", "quantityOpen", "shipBeforeDate", "shipAfterDate", "itemDescription") .from("OrderItemQuantityReportGroupByItem") .where(conditions) .orderBy("orderDate DESC") .cursorScrollInsensitive() .distinct() .queryIterator() orderItemList = [] totalCostPrice = 0.0 totalListPrice = 0.0 totalMarkup = 0.0 totalDiscount = 0.0 totalRetailPrice = 0.0 totalquantityOrdered = 0.0 totalquantityOpen = 0.0 listIt.each { listValue -> orderId = listValue.orderId productId = listValue.productId orderDate = listValue.orderDate quantityOrdered = listValue.quantityOrdered quantityOpen = listValue.quantityOpen quantityIssued = listValue.quantityIssued itemDescription = listValue.itemDescription shipAfterDate = listValue.shipAfterDate shipBeforeDate = listValue.shipBeforeDate productIdCondExpr = [EntityCondition.makeCondition("productId", EntityOperator.EQUALS, productId)] productPrices = select("price","productPriceTypeId").from("ProductPrice").where(productIdCondExpr).queryList() costPrice = 0.0 retailPrice = 0.0 listPrice = 0.0 productPrices.each { productPriceMap -> if (productPriceMap.productPriceTypeId.equals("AVERAGE_COST")) { costPrice = productPriceMap.price } else if (productPriceMap.productPriceTypeId.equals("DEFAULT_PRICE")) { retailPrice = productPriceMap.price } else if (productPriceMap.productPriceTypeId.equals("LIST_PRICE")) { listPrice = productPriceMap.price } } totalListPrice += listPrice totalRetailPrice += retailPrice totalCostPrice += costPrice totalquantityOrdered += quantityOrdered totalquantityOpen += quantityOpen costPriceDividendValue = costPrice if (costPriceDividendValue) { percentMarkup = ((retailPrice - costPrice)/costPrice)*100 } else{ percentMarkup = "" } orderItemMap = [orderDate : orderDate, orderId : orderId, productId : productId, itemDescription : itemDescription, quantityOrdered : quantityOrdered, quantityIssued : quantityIssued, quantityOpen : quantityOpen, shipAfterDate : shipAfterDate, shipBeforeDate : shipBeforeDate, costPrice : costPrice, retailPrice : retailPrice, listPrice : listPrice, discount : listPrice - retailPrice, calculatedMarkup : retailPrice - costPrice, percentMarkup : percentMarkup] orderItemList.add(orderItemMap) } listIt.close() totalAmountList = [] if (orderItemList) { totalCostPriceDividendValue = totalCostPrice if (totalCostPriceDividendValue) { totalPercentMarkup = ((totalRetailPrice - totalCostPrice)/totalCostPrice)*100 } else{ totalPercentMarkup = "" } totalAmountMap = [totalCostPrice : totalCostPrice, totalListPrice : totalListPrice, totalRetailPrice : totalRetailPrice, totalquantityOrdered : totalquantityOrdered, quantityOrdered : quantityOrdered, totalquantityOpen : totalquantityOpen, totalDiscount : totalListPrice - totalRetailPrice, totalMarkup : totalRetailPrice - totalCostPrice, totalPercentMarkup : totalPercentMarkup] totalAmountList.add(totalAmountMap) } context.orderItemList = orderItemList context.totalAmountList = totalAmountList