001// -------------------------------------------------------------------------------- 002// Copyright 2002-2026 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.model.control.payment.server.transfer; 018 019import javax.inject.Inject; 020import com.echothree.model.control.comment.common.CommentConstants; 021import com.echothree.model.control.payment.common.PaymentMethodTypes; 022import com.echothree.model.control.payment.common.PaymentOptions; 023import com.echothree.model.control.payment.common.transfer.PaymentMethodTransfer; 024import com.echothree.model.control.payment.server.control.PaymentMethodControl; 025import com.echothree.model.control.payment.server.control.PaymentMethodTypeControl; 026import com.echothree.model.control.payment.server.control.PaymentProcessorControl; 027import com.echothree.model.data.payment.server.entity.PaymentMethod; 028import com.echothree.model.data.user.server.entity.UserVisit; 029import javax.enterprise.context.RequestScoped; 030 031@RequestScoped 032public class PaymentMethodTransferCache 033 extends BasePaymentTransferCache<PaymentMethod, PaymentMethodTransfer> { 034 035 @Inject 036 PaymentMethodControl paymentMethodControl; 037 038 @Inject 039 PaymentMethodTypeControl paymentMethodTypeControl; 040 041 @Inject 042 PaymentProcessorControl paymentProcessorControl; 043 044 boolean includeComments; 045 046 /** Creates a new instance of PaymentMethodTransferCache */ 047 protected PaymentMethodTransferCache() { 048 super(); 049 050 var options = session.getOptions(); 051 if(options != null) { 052 setIncludeUuid(options.contains(PaymentOptions.PaymentMethodIncludeUuid)); 053 includeComments = options.contains(PaymentOptions.PaymentMethodIncludeComments); 054 setIncludeEntityAttributeGroups(options.contains(PaymentOptions.PaymentMethodIncludeEntityAttributeGroups)); 055 } 056 057 setIncludeEntityInstance(true); 058 } 059 060 @Override 061 public PaymentMethodTransfer getTransfer(UserVisit userVisit, PaymentMethod paymentMethod) { 062 var paymentMethodTransfer = get(paymentMethod); 063 064 if(paymentMethodTransfer == null) { 065 var paymentMethodDetail = paymentMethod.getLastDetail(); 066 var paymentMethodName = paymentMethodDetail.getPaymentMethodName(); 067 var paymentMethodTypeTransfer = paymentMethodTypeControl.getPaymentMethodTypeTransfer(userVisit, paymentMethodDetail.getPaymentMethodType()); 068 var paymentMethodTypeName = paymentMethodTypeTransfer.getPaymentMethodTypeName(); 069 var paymentProcessor = paymentMethodDetail.getPaymentProcessor(); 070 var paymentProcessorTransfer = paymentProcessor == null ? null : paymentProcessorControl.getPaymentProcessorTransfer(userVisit, paymentProcessor); 071 var isDefault = paymentMethodDetail.getIsDefault(); 072 var sortOrder = paymentMethodDetail.getSortOrder(); 073 var description = paymentMethodControl.getBestPaymentMethodDescription(paymentMethod, getLanguage(userVisit)); 074 Boolean requestNameOnCard = null; 075 Boolean requireNameOnCard = null; 076 Boolean checkCardNumber = null; 077 Boolean requestExpirationDate = null; 078 Boolean requireExpirationDate = null; 079 Boolean checkExpirationDate = null; 080 Boolean requestSecurityCode = null; 081 Boolean requireSecurityCode = null; 082 String cardNumberValidationPattern = null; 083 String securityCodeValidationPattern = null; 084 Boolean retainCreditCard = null; 085 Boolean retainSecurityCode = null; 086 Boolean requestBilling = null; 087 Boolean requireBilling = null; 088 Boolean requestIssuer = null; 089 Boolean requireIssuer = null; 090 Integer holdDays = null; 091 092 if(paymentMethodTypeName.equals(PaymentMethodTypes.CHECK.name())) { 093 var paymentMethodCheck = paymentMethodControl.getPaymentMethodCheck(paymentMethod); 094 095 holdDays = paymentMethodCheck.getHoldDays(); 096 } else if(paymentMethodTypeName.equals(PaymentMethodTypes.CREDIT_CARD.name())) { 097 var paymentMethodCreditCard = paymentMethodControl.getPaymentMethodCreditCard(paymentMethod); 098 099 requestNameOnCard = paymentMethodCreditCard.getRequestNameOnCard(); 100 requireNameOnCard = paymentMethodCreditCard.getRequireNameOnCard(); 101 checkCardNumber = paymentMethodCreditCard.getCheckCardNumber(); 102 requestExpirationDate = paymentMethodCreditCard.getRequestExpirationDate(); 103 requireExpirationDate = paymentMethodCreditCard.getRequireExpirationDate(); 104 checkExpirationDate = paymentMethodCreditCard.getCheckExpirationDate(); 105 requestSecurityCode = paymentMethodCreditCard.getRequestSecurityCode(); 106 requireSecurityCode = paymentMethodCreditCard.getRequireSecurityCode(); 107 cardNumberValidationPattern = paymentMethodCreditCard.getCardNumberValidationPattern(); 108 securityCodeValidationPattern = paymentMethodCreditCard.getSecurityCodeValidationPattern(); 109 retainCreditCard = paymentMethodCreditCard.getRetainCreditCard(); 110 retainSecurityCode = paymentMethodCreditCard.getRetainSecurityCode(); 111 requestBilling = paymentMethodCreditCard.getRequestBilling(); 112 requireBilling = paymentMethodCreditCard.getRequireBilling(); 113 requestIssuer = paymentMethodCreditCard.getRequestIssuer(); 114 requireIssuer = paymentMethodCreditCard.getRequireIssuer(); 115 } 116 117 paymentMethodTransfer = new PaymentMethodTransfer(paymentMethodName, paymentMethodTypeTransfer, paymentProcessorTransfer, 118 isDefault, sortOrder, description, requestNameOnCard, requireNameOnCard, checkCardNumber, 119 requestExpirationDate, requireExpirationDate, checkExpirationDate, requestSecurityCode, requireSecurityCode, cardNumberValidationPattern, 120 securityCodeValidationPattern, retainCreditCard, retainSecurityCode, requestBilling, requireBilling, requestIssuer, requireIssuer, holdDays); 121 put(userVisit, paymentMethod, paymentMethodTransfer); 122 123 if(includeComments) { 124 setupComments(userVisit, paymentMethod, null, paymentMethodTransfer, CommentConstants.CommentType_PAYMENT_METHOD); 125 } 126 } 127 128 return paymentMethodTransfer; 129 } 130 131}