| /* |
| * 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.* |
| |
| BigDecimal calcItemTotal(List headers) { |
| BigDecimal total = BigDecimal.ZERO |
| headers.each { header -> |
| total = total.plus(header.grandTotal ?: BigDecimal.ZERO) |
| } |
| return total |
| } |
| |
| double calcItemCount(List items) { |
| double count = 0.00 |
| items.each { item -> |
| count += item.quantity ?: 0.00 |
| } |
| return count |
| } |
| |
| dayBegin = UtilDateTime.getDayStart(nowTimestamp, timeZone, locale) |
| weekBegin = UtilDateTime.getWeekStart(nowTimestamp, timeZone, locale) |
| monthBegin = UtilDateTime.getMonthStart(nowTimestamp, timeZone, locale) |
| yearBegin = UtilDateTime.getYearStart(nowTimestamp, timeZone, locale) |
| |
| dayEnd = UtilDateTime.getDayEnd(nowTimestamp, timeZone, locale) |
| weekEnd = UtilDateTime.getWeekEnd(nowTimestamp, timeZone, locale) |
| monthEnd = UtilDateTime.getMonthEnd(nowTimestamp, timeZone, locale) |
| yearEnd = UtilDateTime.getYearEnd(nowTimestamp, timeZone, locale) |
| |
| // order status report |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("orderItemSeqId", EntityOperator.EQUALS, null), |
| EntityCondition.makeCondition("orderPaymentPreferenceId", EntityOperator.EQUALS, null), |
| EntityCondition.makeCondition("statusDatetime", EntityOperator.GREATER_THAN_EQUAL_TO, dayBegin), |
| EntityCondition.makeCondition("statusDatetime", EntityOperator.LESS_THAN_EQUAL_TO, dayEnd)], |
| EntityOperator.AND) |
| dayList = from("OrderStatus").where(ecl).queryList() |
| context.dayOrder = EntityUtil.filterByAnd(dayList, [statusId : "ORDER_CREATED"]) |
| context.dayApprove = EntityUtil.filterByAnd(dayList, [statusId : "ORDER_APPROVED"]) |
| context.dayComplete = EntityUtil.filterByAnd(dayList, [statusId : "ORDER_COMPLETED"]) |
| context.dayCancelled = EntityUtil.filterByAnd(dayList, [statusId : "ORDER_CANCELLED"]) |
| context.dayRejected = EntityUtil.filterByAnd(dayList, [statusId : "ORDER_REJECTED"]) |
| |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("orderItemSeqId", EntityOperator.EQUALS, null), |
| EntityCondition.makeCondition("orderPaymentPreferenceId", EntityOperator.EQUALS, null), |
| EntityCondition.makeCondition("statusDatetime", EntityOperator.GREATER_THAN_EQUAL_TO, weekBegin), |
| EntityCondition.makeCondition("statusDatetime", EntityOperator.LESS_THAN_EQUAL_TO, weekEnd)], |
| EntityOperator.AND) |
| weekList = from("OrderStatus").where(ecl).queryList() |
| context.weekOrder = EntityUtil.filterByAnd(weekList, [statusId : "ORDER_CREATED"]) |
| context.weekApprove = EntityUtil.filterByAnd(weekList, [statusId: "ORDER_APPROVED"]) |
| context.weekComplete = EntityUtil.filterByAnd(weekList, [statusId : "ORDER_COMPLETED"]) |
| context.weekCancelled = EntityUtil.filterByAnd(weekList, [statusId : "ORDER_CANCELLED"]) |
| context.weekRejected = EntityUtil.filterByAnd(weekList, [statusId : "ORDER_REJECTED"]) |
| |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("orderItemSeqId", EntityOperator.EQUALS, null), |
| EntityCondition.makeCondition("orderPaymentPreferenceId", EntityOperator.EQUALS, null), |
| EntityCondition.makeCondition("statusDatetime", EntityOperator.GREATER_THAN_EQUAL_TO, monthBegin), |
| EntityCondition.makeCondition("statusDatetime", EntityOperator.LESS_THAN_EQUAL_TO, monthEnd)], |
| EntityOperator.AND) |
| monthList = from("OrderStatus").where(ecl).queryList() |
| context.monthOrder = EntityUtil.filterByAnd(monthList, [statusId : "ORDER_CREATED"]) |
| context.monthApprove = EntityUtil.filterByAnd(monthList, [statusId : "ORDER_APPROVED"]) |
| context.monthComplete = EntityUtil.filterByAnd(monthList, [statusId : "ORDER_COMPLETED"]) |
| context.monthCancelled = EntityUtil.filterByAnd(monthList, [statusId : "ORDER_CANCELLED"]) |
| context.monthRejected = EntityUtil.filterByAnd(monthList, [statusId : "ORDER_REJECTED"]) |
| |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("orderItemSeqId", EntityOperator.EQUALS, null), |
| EntityCondition.makeCondition("orderPaymentPreferenceId", EntityOperator.EQUALS, null), |
| EntityCondition.makeCondition("statusDatetime", EntityOperator.GREATER_THAN_EQUAL_TO, yearBegin), |
| EntityCondition.makeCondition("statusDatetime", EntityOperator.LESS_THAN_EQUAL_TO, yearEnd)], |
| EntityOperator.AND) |
| yearList = from("OrderStatus").where(ecl).queryList() |
| context.yearOrder = EntityUtil.filterByAnd(yearList, [statusId : "ORDER_CREATED"]) |
| context.yearApprove = EntityUtil.filterByAnd(yearList, [statusId : "ORDER_APPROVED"]) |
| context.yearComplete = EntityUtil.filterByAnd(yearList, [statusId : "ORDER_COMPLETED"]) |
| context.yearCancelled = EntityUtil.filterByAnd(yearList, [statusId : "ORDER_CANCELLED"]) |
| context.yearRejected = EntityUtil.filterByAnd(yearList, [statusId : "ORDER_REJECTED"]) |
| |
| // order totals and item counts |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("itemStatusId", EntityOperator.NOT_EQUAL, "ITEM_REJECTED"), |
| EntityCondition.makeCondition("itemStatusId", EntityOperator.NOT_EQUAL, "ITEM_CANCELLED"), |
| EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, dayBegin), |
| EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, dayEnd), |
| EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER")], |
| EntityOperator.AND) |
| dayItems = from("OrderHeaderAndItems").where(ecl).queryList() |
| dayItemsPending = EntityUtil.filterByAnd(dayItems, [itemStatusId : "ITEM_ORDERED"]) |
| |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ORDER_REJECTED"), |
| EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ORDER_CANCELLED"), |
| EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, dayBegin), |
| EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, dayEnd), |
| EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER")], |
| EntityOperator.AND) |
| dayHeaders = from("OrderHeader").where(ecl).queryList() |
| dayHeadersPending = EntityUtil.filterByAnd(dayHeaders, [statusId : "ORDER_CREATED"]) |
| |
| dayItemTotal = calcItemTotal(dayHeaders) |
| dayItemCount = calcItemCount(dayItems) |
| dayItemTotalPending = calcItemTotal(dayHeadersPending) |
| dayItemCountPending = calcItemCount(dayItemsPending) |
| dayItemTotalPaid = dayItemTotal - dayItemTotalPending |
| dayItemCountPaid = dayItemCount - dayItemCountPending |
| context.dayItemTotal = dayItemTotal |
| context.dayItemCount = dayItemCount |
| context.dayItemTotalPending = dayItemTotalPending |
| context.dayItemCountPending = dayItemCountPending |
| context.dayItemTotalPaid = dayItemTotalPaid |
| context.dayItemCountPaid = dayItemCountPaid |
| |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("itemStatusId", EntityOperator.NOT_EQUAL, "ITEM_REJECTED"), |
| EntityCondition.makeCondition("itemStatusId", EntityOperator.NOT_EQUAL, "ITEM_CANCELLED"), |
| EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, weekBegin), |
| EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, weekEnd), |
| EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER")], |
| EntityOperator.AND) |
| weekItems = from("OrderHeaderAndItems").where(ecl).queryList() |
| weekItemsPending = EntityUtil.filterByAnd(weekItems, [itemStatusId : "ITEM_ORDERED"]) |
| |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ORDER_REJECTED"), |
| EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ORDER_CANCELLED"), |
| EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, weekBegin), |
| EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, weekEnd), |
| EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER")], |
| EntityOperator.AND) |
| weekHeaders = from("OrderHeader").where(ecl).queryList() |
| weekHeadersPending = EntityUtil.filterByAnd(weekHeaders, [statusId : "ORDER_CREATED"]) |
| |
| weekItemTotal = calcItemTotal(weekHeaders) |
| weekItemCount = calcItemCount(weekItems) |
| weekItemTotalPending = calcItemTotal(weekHeadersPending) |
| weekItemCountPending = calcItemCount(weekItemsPending) |
| weekItemTotalPaid = weekItemTotal - weekItemTotalPending |
| weekItemCountPaid = weekItemCount - weekItemCountPending |
| context.weekItemTotal = weekItemTotal |
| context.weekItemCount = weekItemCount |
| context.weekItemTotalPending = weekItemTotalPending |
| context.weekItemCountPending = weekItemCountPending |
| context.weekItemTotalPaid = weekItemTotalPaid |
| context.weekItemCountPaid = weekItemCountPaid |
| |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("itemStatusId", EntityOperator.NOT_EQUAL, "ITEM_REJECTED"), |
| EntityCondition.makeCondition("itemStatusId", EntityOperator.NOT_EQUAL, "ITEM_CANCELLED"), |
| EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, monthBegin), |
| EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, monthEnd), |
| EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER")], |
| EntityOperator.AND) |
| monthItems = from("OrderHeaderAndItems").where(ecl).queryList() |
| monthItemsPending = EntityUtil.filterByAnd(monthItems, [itemStatusId : "ITEM_ORDERED"]) |
| |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ORDER_REJECTED"), |
| EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ORDER_CANCELLED"), |
| EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, monthBegin), |
| EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, monthEnd), |
| EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER")], |
| EntityOperator.AND) |
| monthHeaders = from("OrderHeader").where(ecl).queryList() |
| monthHeadersPending = EntityUtil.filterByAnd(monthHeaders, [statusId : "ORDER_CREATED"]) |
| |
| monthItemTotal = calcItemTotal(monthHeaders) |
| monthItemCount = calcItemCount(monthItems) |
| monthItemTotalPending = calcItemTotal(monthHeadersPending) |
| monthItemCountPending = calcItemCount(monthItemsPending) |
| monthItemTotalPaid = monthItemTotal - monthItemTotalPending |
| monthItemCountPaid = monthItemCount - monthItemCountPending |
| context.monthItemTotal = monthItemTotal |
| context.monthItemCount = monthItemCount |
| context.monthItemTotalPending = monthItemTotalPending |
| context.monthItemCountPending = monthItemCountPending |
| context.monthItemTotalPaid = monthItemTotalPaid |
| context.monthItemCountPaid = monthItemCountPaid |
| |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("itemStatusId", EntityOperator.NOT_EQUAL, "ITEM_REJECTED"), |
| EntityCondition.makeCondition("itemStatusId", EntityOperator.NOT_EQUAL, "ITEM_CANCELLED"), |
| EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, yearBegin), |
| EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, yearEnd), |
| EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER")], |
| EntityOperator.AND) |
| yearItems = from("OrderHeaderAndItems").where(ecl).queryList() |
| yearItemsPending = EntityUtil.filterByAnd(yearItems, [itemStatusId : "ITEM_ORDERED"]) |
| |
| ecl = EntityCondition.makeCondition([ |
| EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ORDER_REJECTED"), |
| EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "ORDER_CANCELLED"), |
| EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, yearBegin), |
| EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, yearEnd), |
| EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER")], |
| EntityOperator.AND) |
| yearHeaders = from("OrderHeader").where(ecl).queryList() |
| yearHeadersPending = EntityUtil.filterByAnd(yearHeaders, [statusId : "ORDER_CREATED"]) |
| |
| yearItemTotal = calcItemTotal(yearHeaders) |
| yearItemCount = calcItemCount(yearItems) |
| yearItemTotalPending = calcItemTotal(yearHeadersPending) |
| yearItemCountPending = calcItemCount(yearItemsPending) |
| yearItemTotalPaid = yearItemTotal - yearItemTotalPending |
| yearItemCountPaid = yearItemCount - yearItemCountPending |
| context.yearItemTotal = yearItemTotal |
| context.yearItemCount = yearItemCount |
| context.yearItemTotalPending = yearItemTotalPending |
| context.yearItemCountPending = yearItemCountPending |
| context.yearItemTotalPaid = yearItemTotalPaid |
| context.yearItemCountPaid = yearItemCountPaid |
| |
| // order state report |
| waitingPayment = from("OrderHeader").where("statusId", "ORDER_CREATED", "orderTypeId", "SALES_ORDER").queryList() |
| context.waitingPayment = waitingPayment.size() |
| |
| waitingApproval = from("OrderHeader").where("statusId", "ORDER_PROCESSING", "orderTypeId", "SALES_ORDER").queryList() |
| context.waitingApproval = waitingApproval.size() |
| |
| waitingComplete = from("OrderHeader").where("statusId", "ORDER_APPROVED", "orderTypeId", "SALES_ORDER").queryList() |
| context.waitingComplete = waitingComplete.size() |