blob: f157b32cfb1cc712a52881391d179e3ee397b7ed [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.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