/* * 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.accounting.payment.PaymentWorker import org.apache.ofbiz.base.util.UtilNumber import org.apache.ofbiz.entity.condition.EntityCondition import org.apache.ofbiz.entity.condition.EntityOperator basePaymentId = parameters.paymentId basePayment = from("Payment").where("paymentId", basePaymentId).queryOne() decimals = UtilNumber.getBigDecimalScale("invoice.decimals") rounding = UtilNumber.getBigDecimalRoundingMode("invoice.rounding") paymentsMapList = [] // to pass back to the screeen list of unapplied payments // retrieve payments for the related parties which have not been (fully) applied yet List payments = null exprList = [] expr = EntityCondition.makeCondition("partyIdTo", EntityOperator.EQUALS, basePayment.getString("partyIdFrom")) exprList.add(expr) expr = EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, basePayment.getString("partyIdTo")) exprList.add(expr) expr = EntityCondition.makeCondition("paymentId", EntityOperator.NOT_EQUAL, basePayment.getString("paymentId")) exprList.add(expr) // only payments with received and sent exprListStatus = [] expr = EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_RECEIVED") exprListStatus.add(expr) expr = EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_SENT") exprListStatus.add(expr) orCond = EntityCondition.makeCondition(exprListStatus, EntityOperator.OR) exprList.add(orCond) topCond = EntityCondition.makeCondition(exprList, EntityOperator.AND) payments = from("Payment").where(topCond).orderBy("effectiveDate").queryList() if (payments) { basePaymentApplied = PaymentWorker.getPaymentApplied(basePayment) basePaymentAmount = basePayment.getBigDecimal("amount") basePaymentToApply = basePaymentAmount.subtract(basePaymentApplied) payments.each { payment -> if (PaymentWorker.getPaymentNotApplied(payment).signum() == 1) { // positiv not applied amount? // yes, put in the map paymentMap = [:] paymentMap.paymentId = basePaymentId paymentMap.toPaymentId = payment.paymentId paymentMap.currencyUomId = payment.currencyUomId paymentMap.effectiveDate = payment.effectiveDate.toString().substring(0,10) // list as YYYY-MM-DD paymentMap.amount = payment.getBigDecimal("amount") paymentMap.amountApplied = PaymentWorker.getPaymentApplied(payment) paymentToApply = PaymentWorker.getPaymentNotApplied(payment) if (paymentToApply.compareTo(basePaymentToApply) < 0 ) { paymentMap.amountToApply = paymentToApply } else { paymentMap.amountToApply = basePaymentToApply } paymentsMapList.add(paymentMap) } } } context.payments = paymentsMapList