ReportPaymentMessageSender.java
package uk.gov.dhsc.htbhf.claimant.reporting;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import uk.gov.dhsc.htbhf.claimant.entitlement.PaymentCycleVoucherEntitlement;
import uk.gov.dhsc.htbhf.claimant.entity.Claim;
import uk.gov.dhsc.htbhf.claimant.entity.PaymentCycle;
import uk.gov.dhsc.htbhf.claimant.message.MessageQueueClient;
import uk.gov.dhsc.htbhf.claimant.message.payload.ReportPaymentMessagePayload;
import java.time.LocalDateTime;
import static uk.gov.dhsc.htbhf.claimant.message.MessageType.REPORT_PAYMENT;
import static uk.gov.dhsc.htbhf.claimant.reporting.PaymentAction.TOP_UP_PAYMENT;
/**
* Class responsible for sending report payment messages.
*/
@Component
@AllArgsConstructor
public class ReportPaymentMessageSender {
private final MessageQueueClient messageQueueClient;
/**
* Sends a report payment message with a {@link PaymentAction} of {@link PaymentAction#TOP_UP_PAYMENT}.
* @param claim the claim the payment is made against
* @param paymentCycle the current payment cycle
* @param paymentForPregnancyInPence the payment amount made for pregnancy
*/
public void sendReportPregnancyTopUpPaymentMessage(Claim claim, PaymentCycle paymentCycle, int paymentForPregnancyInPence) {
ReportPaymentMessagePayload payload = ReportPaymentMessagePayload.builder()
.claimId(claim.getId())
.paymentCycleId(paymentCycle.getId())
.identityAndEligibilityResponse(paymentCycle.getIdentityAndEligibilityResponse())
.timestamp(LocalDateTime.now())
.paymentAction(TOP_UP_PAYMENT)
.paymentForPregnancy(paymentForPregnancyInPence)
.build();
messageQueueClient.sendMessage(payload, REPORT_PAYMENT);
}
public void sendReportPaymentMessage(Claim claim, PaymentCycle paymentCycle, PaymentAction paymentAction) {
ReportPaymentMessagePayload payload = createPayloadWithPaymentAmountsDerivedFromPaymentCycle(claim, paymentCycle, paymentAction);
messageQueueClient.sendMessage(payload, REPORT_PAYMENT);
}
private ReportPaymentMessagePayload createPayloadWithPaymentAmountsDerivedFromPaymentCycle(Claim claim,
PaymentCycle paymentCycle,
PaymentAction paymentAction) {
PaymentCycleVoucherEntitlement voucherEntitlement = paymentCycle.getVoucherEntitlement();
int singleVoucherValueInPence = voucherEntitlement.getSingleVoucherValueInPence();
return ReportPaymentMessagePayload.builder()
.claimId(claim.getId())
.paymentCycleId(paymentCycle.getId())
.identityAndEligibilityResponse(paymentCycle.getIdentityAndEligibilityResponse())
.timestamp(LocalDateTime.now())
.paymentAction(paymentAction)
.paymentForChildrenUnderOne(voucherEntitlement.getVouchersForChildrenUnderOne() * singleVoucherValueInPence)
.paymentForChildrenBetweenOneAndFour(voucherEntitlement.getVouchersForChildrenBetweenOneAndFour() * singleVoucherValueInPence)
.paymentForPregnancy(voucherEntitlement.getVouchersForPregnancy() * singleVoucherValueInPence)
.paymentForBackdatedVouchers(voucherEntitlement.getBackdatedVouchersValueInPence())
.build();
}
}