| /* |
| * 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.UtilDateTime |
| import org.apache.ofbiz.entity.condition.EntityCondition |
| import org.apache.ofbiz.entity.condition.EntityOperator |
| import org.apache.ofbiz.product.product.ProductContentWrapper |
| |
| bestSellingProducts = [] |
| exprList = [] |
| exprList.add(EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, UtilDateTime.getDayStart(filterDate))) |
| exprList.add(EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, UtilDateTime.getDayEnd(filterDate))) |
| exprList.add(EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER")) |
| exprList.add(EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ORDER_CANCELLED")) |
| |
| orderHeaderList = from("OrderHeader").where(exprList).queryList() |
| |
| orderHeaderList.each { orderHeader -> |
| exprList.clear() |
| exprList.add(EntityCondition.makeCondition("orderId", orderHeader.orderId)) |
| exprList.add(EntityCondition.makeCondition("orderItemTypeId", "PRODUCT_ORDER_ITEM")) |
| exprList.add(EntityCondition.makeCondition("isPromo", "N")) |
| exprList.add(EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ITEM_CANCELLED")) |
| |
| orderItemList = from("OrderItem").where(exprList).queryList() |
| |
| orderItemList.each { orderItem -> |
| orderItemDetail = [:] |
| qtyOrdered = BigDecimal.ZERO |
| qtyOrdered += orderItem.quantity |
| if (orderItem.cancelQuantity) { |
| qtyOrdered -= orderItem.cancelQuantity |
| } |
| amount = BigDecimal.ZERO |
| amount = qtyOrdered * orderItem.unitPrice |
| inListFlag = false |
| |
| bestSellingProducts.each { bestSellingProduct -> |
| if ((bestSellingProduct.productId).equals(orderItem.productId) && (bestSellingProduct.currencyUom).equals(orderHeader.currencyUom)) { |
| inListFlag = true |
| bestSellingProduct.amount += amount |
| bestSellingProduct.qtyOrdered += qtyOrdered |
| } |
| } |
| |
| if (inListFlag == false) { |
| orderItemDetail.productId = orderItem.productId |
| product = from("Product").where("productId", orderItem.productId).queryOne() |
| contentWrapper = new ProductContentWrapper(product, request) |
| orderItemDetail.productName = contentWrapper.get("PRODUCT_NAME", "html") |
| orderItemDetail.amount = amount |
| orderItemDetail.qtyOrdered = qtyOrdered |
| orderItemDetail.currencyUom = orderHeader.currencyUom |
| bestSellingProducts.add(orderItemDetail) |
| } |
| } |
| } |
| |
| // Sorting List |
| topSellingProducts = [] |
| itr = 1 |
| while (itr <= 5) { |
| orderItemDetail = [:] |
| bestSellingProducts.each { bestSellingProduct -> |
| if (!(orderItemDetail.isEmpty())) { |
| if (bestSellingProduct.qtyOrdered > orderItemDetail.qtyOrdered) { |
| orderItemDetail = bestSellingProduct |
| } |
| if (bestSellingProduct.qtyOrdered == orderItemDetail.qtyOrdered && bestSellingProduct.amount > orderItemDetail.amount) { |
| orderItemDetail = bestSellingProduct |
| } |
| } else { |
| orderItemDetail = bestSellingProduct |
| } |
| } |
| if (!orderItemDetail.isEmpty()) { |
| if (orderItemDetail.amount) { |
| orderItemDetail.amount = orderItemDetail.amount.setScale(2, BigDecimal.ROUND_HALF_UP) |
| } |
| topSellingProducts.add(orderItemDetail) |
| bestSellingProducts.remove(orderItemDetail) |
| } |
| itr++ |
| } |
| |
| context.bestSellingProducts = topSellingProducts |
| |
| context.now = UtilDateTime.toDateString(UtilDateTime.nowDate()) |