in birt/src/main/java/org/apache/ofbiz/birt/flexible/BirtMasterReportServices.java [209:382]
public static Map<String, Object> turnOver(DispatchContext dctx, Map<String, Object> context) {
Delegator delegator = dctx.getDelegator();
Locale locale = (Locale) context.get("locale");
IReportContext reportContext = (IReportContext) context.get("reportContext");
Map<String, Object> parameters = UtilGenerics.cast(reportContext.getParameterValue("parameters"));
List<GenericValue> listTurnOver = null;
List<Map<String, Object>> listInvoiceEditable = new ArrayList<>();
List<EntityCondition> listAllConditions = new ArrayList<>();
try {
// treating fromDate field condition
if (UtilValidate.isNotEmpty(parameters.get("fromDate"))) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String fromDateString = (String) parameters.get("fromDate");
Timestamp fromDate = new Timestamp(sdf.parse(fromDateString).getTime());
EntityExpr conditionFromDate = EntityCondition.makeCondition("invoiceDate", EntityOperator.GREATER_THAN_EQUAL_TO, fromDate);
listAllConditions.add(conditionFromDate);
}
// treating throughDate field condition
if (UtilValidate.isNotEmpty(parameters.get("throughDate"))) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String throughDateString = (String) parameters.get("throughDate");
Timestamp throughDate = new Timestamp(sdf.parse(throughDateString).getTime());
EntityExpr conditionThroughDate = EntityCondition.makeCondition("invoiceDate", EntityOperator.LESS_THAN_EQUAL_TO, throughDate);
listAllConditions.add(conditionThroughDate);
}
// product category field condition
if (UtilValidate.isNotEmpty(parameters.get("productCategoryId"))) {
List<String> productCategoryList = new ArrayList<>();
if (parameters.get("productCategoryId") instanceof String) {
String productCategoryId = (String) parameters.get("productCategoryId");
productCategoryList.add(productCategoryId);
} else if (parameters.get("productStoreId") instanceof String) {
productCategoryList = UtilGenerics.cast(parameters.get("productCategoryId"));
}
// getting productIds in these categories
EntityExpr conditionProductCategory = EntityCondition.makeCondition("primaryProductCategoryId", EntityOperator.IN,
productCategoryList);
EntityExpr conditionFromDate = EntityCondition.makeCondition("fromDate", EntityOperator.GREATER_THAN_EQUAL_TO,
UtilDateTime.nowTimestamp());
EntityExpr conditionBeforeDate = EntityCondition.makeCondition("thruDate", EntityOperator.LESS_THAN_EQUAL_TO,
UtilDateTime.nowTimestamp());
EntityExpr conditionNull = EntityCondition.makeCondition("thruDate", null);
EntityCondition conditionThroughDate = EntityCondition.makeCondition(EntityOperator.OR, UtilMisc.toList(conditionBeforeDate,
conditionNull));
List<GenericValue> listProductIds = EntityQuery.use(delegator)
.from("ProductCategoryMember")
.where(EntityCondition.makeCondition(UtilMisc.toList(conditionProductCategory, conditionFromDate, conditionThroughDate)))
.select("productId").queryList();
List<String> listProductIdsString = EntityUtil.getFieldListFromEntityList(listProductIds, "productId", true);
EntityExpr conditionProductCat = EntityCondition.makeCondition("productId", EntityOperator.IN, listProductIdsString);
listAllConditions.add(conditionProductCat);
}
// productStoreId condition
List<String> productStoreList = new ArrayList<>();
if (UtilValidate.isNotEmpty(parameters.get("productStoreId"))) {
if (parameters.get("productStoreId") instanceof String) {
String productStoreId = (String) parameters.get("productStoreId");
productStoreList.add(productStoreId);
} else if (parameters.get("productStoreId") instanceof List) {
productStoreList = UtilGenerics.cast(parameters.get("productStoreId"));
}
// getting list of invoice Ids linked to these productStore
EntityExpr conditionProductStoreId = EntityCondition.makeCondition("productStoreId", EntityOperator.IN, productStoreList);
List<GenericValue> listOrderAndProductStores =
EntityQuery.use(delegator).from("OrderAndProductStore").where(conditionProductStoreId).select("orderId").queryList();
List<String> listOrderIds = EntityUtil.getFieldListFromEntityList(listOrderAndProductStores, "orderId", true);
EntityExpr conditionOrderId = EntityCondition.makeCondition("orderId", EntityOperator.IN, listOrderIds);
List<GenericValue> listInvoices =
EntityQuery.use(delegator).from("OrderItemBilling").where(conditionOrderId).select("invoiceId").queryList();
List<String> listInvoiceString = EntityUtil.getFieldListFromEntityList(listInvoices, "invoiceId", true);
EntityExpr conditionInvoiceIdProductStore = EntityCondition.makeCondition("invoiceId", EntityOperator.IN, listInvoiceString);
listAllConditions.add(conditionInvoiceIdProductStore);
}
// adding mandatory conditions
// condition on invoice item type
List<String> listInvoiceItemType = UtilMisc.toList("ITM_PROMOTION_ADJ", "INV_PROD_ITEM", "INV_FPROD_ITEM", "INV_DPROD_ITEM",
"INV_FDPROD_ITEM", "INV_PROD_FEATR_ITEM");
listInvoiceItemType.add("ITM_DISCOUNT_ADJ");
listInvoiceItemType.add("CRT_FPROD_ITEM");
listInvoiceItemType.add("CRT_DPROD_ITEM");
listInvoiceItemType.add("CRT_FDPROD_ITEM");
listInvoiceItemType.add("CRT_SPROD_ITEM");
listInvoiceItemType.add("CRT_PROMOTION_ADJ");
listInvoiceItemType.add("CRT_DISCOUNT_ADJ");
listInvoiceItemType.add("CRT_MAN_ADJ");
listInvoiceItemType.add("INV_SPROD_ITEM");
EntityExpr conditionInvoiceItemType = EntityCondition.makeCondition("invoiceItemTypeId", EntityOperator.IN, listInvoiceItemType);
listAllConditions.add(conditionInvoiceItemType);
// condition on invoice ((not cancelled) or null)
EntityExpr conditionStatusNotCancelled = EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "INVOICE_CANCELLED");
EntityExpr conditionStatusNull = EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, null);
EntityCondition conditionStatus = EntityCondition.makeCondition(UtilMisc.toList(conditionStatusNotCancelled, conditionStatusNull),
EntityOperator.OR);
listAllConditions.add(conditionStatus);
// condition sales invoice or customer return invoice
EntityExpr conditionSalesInvoice = EntityCondition.makeCondition("invoiceTypeId", EntityOperator.IN, UtilMisc.toList("SALES_INVOICE",
"CUST_RTN_INVOICE"));
listAllConditions.add(conditionSalesInvoice);
// retrieving all invoices
Set<String> fieldsToSelect = UtilMisc.toSet("invoiceId");
fieldsToSelect.add("invoiceTypeId");
fieldsToSelect.add("invoicePartyId");
fieldsToSelect.add("statusId");
fieldsToSelect.add("invoiceDate");
fieldsToSelect.add("dueDate");
fieldsToSelect.add("currencyUomId");
fieldsToSelect.add("invoiceItemTypeId");
fieldsToSelect.add("invoiceItemSeqId");
fieldsToSelect.add("quantity");
fieldsToSelect.add("amount");
fieldsToSelect.add("productId");
fieldsToSelect.add("partyId");
fieldsToSelect.add("primaryProductCategoryId");
listTurnOver = EntityQuery.use(delegator)
.from("InvoiceItemProductAndParty")
.where(EntityCondition.makeCondition(listAllConditions))
.select(fieldsToSelect)
.queryList();
// adding missing fields
for (GenericValue invoice : listTurnOver) {
Map<String, Object> invoiceEditableTemp = UtilGenerics.cast(invoice.clone());
invoiceEditableTemp.remove("GenericEntity");
Map<String, Object> invoiceEditable = new HashMap<>();
invoiceEditable.putAll(invoiceEditableTemp);
invoiceEditable.put("partyName", PartyHelper.getPartyName(delegator, invoice.getString("partyId"), false));
// adding productStoreId and productStoreName
EntityExpr conditionInvoiceId = EntityCondition.makeCondition("invoiceId", invoice.getString("invoiceId"));
// EntityExpr conditionInvoiceItemSeqId = EntityCondition.makeCondition("invoiceItemSeqId", invoice.getString
// ("invoiceItemSeqId"));
// List<GenericValue> listOrderBilling = delegator.findList("OrderItemBilling", EntityCondition.makeCondition
// (UtilMisc.toList(conditionInvoiceId, conditionInvoiceItemSeqId)), UtilMisc.toSet("orderId"), null, null, false);
GenericValue orderBilling = EntityQuery.use(delegator)
.from("OrderItemBilling")
.where(conditionInvoiceId)
.select("orderId")
.queryFirst();
if (orderBilling != null) {
EntityExpr conditionOrderId = EntityCondition.makeCondition("orderId", orderBilling.getString("orderId"));
GenericValue productStore = EntityQuery.use(delegator)
.from("OrderAndProductStore")
.where(conditionOrderId)
.cache()
.queryFirst();
if (UtilValidate.isNotEmpty(productStoreList) && !productStoreList.contains(productStore.getString("productStoreId"))) {
continue; // FIXME pretty ugly... but had problems with the rare case where an invoice matches with several orders with
// more than one productStore
}
invoiceEditable.put("productStoreId", productStore.getString("productStoreId"));
invoiceEditable.put("storeName", productStore.getString("storeName"));
} else {
invoiceEditable.put("productStoreId", "_NA_");
invoiceEditable.put("storeName", "_NA_");
}
listInvoiceEditable.add(invoiceEditable);
}
} catch (Exception e) {
Debug.logError(e, MODULE);
return ServiceUtil.returnError(UtilProperties.getMessage(RESOURCE, "BirtErrorRetrievingTurnOver", locale));
}
Map<String, Object> result = ServiceUtil.returnSuccess();
result.put("records", listInvoiceEditable);
return result;
}