Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CriteriaBuilder cb = entityManager.getCriteriaBuilder();
- CriteriaQuery<ReportVendorDetailsDTO> query = cb.createQuery(ReportVendorDetailsDTO.class);
- Root<PayableCheckInfo> checkInfoRoot = query.from(PayableCheckInfo.class);
- Join<PayableCheckInfo, PayableCheck> payableCheckJoin = checkInfoRoot.join(PayableCheckInfo_.check,
- JoinType.INNER);
- Join<PayableCheck, Vendor> vendorJoin = payableCheckJoin.join(PayableCheck_.vendor, JoinType.INNER);
- Join<PayableCheckInfo, Vendor> secVendorJoin = checkInfoRoot.join(PayableCheckInfo_.vendor, JoinType.LEFT);
- Join<PayableCheckInfo, Employee> secEmployeeJoin = checkInfoRoot.join(PayableCheckInfo_.employee,
- JoinType.LEFT);
- Expression<String> firstName = cb.concat(secEmployeeJoin.get(Employee_.firstName), " ") ;
- Expression<String> firstMiddleName = cb.concat(firstName, secEmployeeJoin.get(Employee_.middleName));
- Expression<String> lastName = cb.concat(" ", secEmployeeJoin.get(Employee_.lastName));
- Expression<String> payeeName = cb.<String>selectCase()
- .when(cb.isNotNull(secVendorJoin.get(Vendor_.name1)), secVendorJoin.get(Vendor_.name1))
- .otherwise(cb.concat(firstMiddleName, lastName));
- Expression<String> payeeNumber = cb.<String>selectCase()
- .when(cb.isNotNull(secVendorJoin.get(Vendor_.id)), cb.function("TO_CHAR", String.class, secVendorJoin.get(Vendor_.vendorNumber), cb.literal("999999")))
- .otherwise(secEmployeeJoin.get(Employee_.ssn));
- List<Predicate> predicates = new ArrayList<>();
- if (CollectionUtils.isNotEmpty(vendorIds)) {
- predicates.add(vendorJoin.in(vendorIds));
- }
- predicates.add(PredUtil.byDates(cb, payableCheckJoin, from, to));
- predicates.add(PredUtil.skipRepays(cb, payableCheckJoin));
- predicates.add(PredUtil.skipVoidedOnSameDate(cb, payableCheckJoin));
- if (isShort) {
- predicates.add((cb.isFalse(payableCheckJoin.get(PayableCheck_.fundTransfer))));
- }
- if (CollectionUtils.isNotEmpty(accountIds)) {
- Join<PayableCheckInfo, Fund> fundJoin = checkInfoRoot.join(PayableCheckInfo_.account, JoinType.LEFT);
- predicates.add((cb.not(fundJoin.in(accountIds))));
- }
- List<Selection<?>> selections = new ArrayList<Selection<?>>();
- selections.add(vendorJoin.get(Vendor_.id));
- selections.add(vendorJoin.get(Vendor_.vendorNumber));
- selections.add(vendorJoin.get(Vendor_.name1));
- selections.add(payeeName);
- selections.add(payeeNumber);
- selections.add(vendorJoin.get(Vendor_.type1099));
- selections.add(cb.sum(checkInfoRoot.get(PayableCheckInfo_.invoiceAmount)));
- query.multiselect(selections)
- .where(cb.and(predicates.toArray(new Predicate[predicates.size()])))
- .groupBy(vendorJoin.get(Vendor_.id), secVendorJoin.get(Vendor_.id), secEmployeeJoin.get(Employee_.id));
- vendorsData = entityManager.createQuery(query).getResultList();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement