blob: 018162b95e7609ed11824a0bfbb4871b957d1bcf [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 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())